Collaborators: Shane Blowes, Jon Chase, Helmut Hillebrand, Michael Burrows, Amanda Bates, Uli Brose, Benoit Gauzens, Laura Antao, Ruben Remelgado, Carsten Meyer, Myriam Hirt, maybe others Assistance: Katherine Lew, Josef Hauser

Introduction

Methods

library(data.table) # for handling large datasets
library(ggplot2) # for some plotting
library(nlme) # for ME models
library(maps) # for map
library(gridExtra) # to combine ggplots together
library(grid) # to combine ggplots together
library(RColorBrewer)
library(MASS) # for stepAIC
library(piecewiseSEM) # for rsquared() for nlme models

options(width=500) # turn off most text wrapping

# tell RStudio to use project root directory as the root for this notebook. Needed since we are storing code in a separate directory.
knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) 
# Turnover and covariates assembled by turnover_vs_temperature_prep.Rmd
trends <- fread('output/turnover_w_covariates.csv.gz')

# set realm order
trends[, REALM := factor(REALM, levels = c('Freshwater', 'Marine', 'Terrestrial'), ordered = FALSE)]

# set up sign of temperature change
trends[, tsign := factor(sign(temptrend))]

# realm that combined Terrestrial and Freshwater, for interacting with human impact
trends[, REALM2 := REALM]
levels(trends$REALM2) = list(TerrFresh = "Freshwater", TerrFresh = "Terrestrial", Marine = "Marine")

# group Marine invertebrates/plants in with All
trends[, taxa_mod2 := taxa_mod]
trends[taxa_mod == 'Marine invertebrates/plants', taxa_mod2 := 'All']

# calculate duration
trends[, duration := maxyrBT - minyrBT + 1]

# trim to data with >= 3 yrs
trends <- trends[nyrBT >= 3, ]

Log-transform some variables, then center and scale.

trends[, tempave.sc := scale(tempave)]
trends[, tempave_metab.sc := scale(tempave_metab)]
trends[, seas.sc := scale(seas)]
trends[, microclim.sc := scale(log(microclim))]
trends[, temptrend.sc := scale(temptrend, center = FALSE)] # do not center
trends[, temptrend_abs.sc := scale(abs(temptrend), center = FALSE)] # do not center, so that 0 is still 0 temperature change
trends[, mass.sc := scale(log(mass_mean_weight))]
trends[, speed.sc := scale(log(speed_mean_weight+1))]
trends[, lifespan.sc := scale(log(lifespan_mean_weight))]
trends[, consumerfrac.sc := scale(consfrac)]
trends[, endothermfrac.sc := scale(endofrac)]
trends[, nspp.sc := scale(log(Nspp))]
trends[, thermal_bias.sc := scale(thermal_bias)]
trends[, npp.sc := scale(log(npp))]
trends[, veg.sc := scale(log(veg+1))]
trends[, duration.sc := scale(log(duration))]
trends[, human_bowler.sc := scale(log(human_bowler+1)), by = REALM2] # separate scaling by realm
trends[REALM2 == 'TerrFresh', human_footprint.sc := scale(log(human_venter+1))]
trends[REALM2 == 'Marine', human_footprint.sc := scale(log(human_halpern))]

Examine how many data points are available

Just turnover

cat('Overall # time-series: ', nrow(trends), '\n')
Overall # time-series:  39195 
cat('# studies: ', trends[, length(unique(STUDY_ID))], '\n')
# studies:  307 
cat('Data points: ', trends[, sum(nyrBT)], '\n')
Data points:  266337 
trends[, table(REALM)]
REALM
 Freshwater      Marine Terrestrial 
        628       35742        2825 
trends[, table(taxa_mod)]
taxa_mod
                        All                  Amphibians                     Benthos                       Birds 
                       1447                         352                        4310                        8719 
                       Fish               Invertebrates                     Mammals Marine invertebrates/plants 
                      21708                        1799                         504                         104 
                      Plant                    Reptiles 
                        248                           4 
trends[, table(taxa_mod, REALM)]
                             REALM
taxa_mod                      Freshwater Marine Terrestrial
  All                                  0   1444           3
  Amphibians                           2      0         350
  Benthos                              0   4310           0
  Birds                                0   6542        2177
  Fish                               610  21098           0
  Invertebrates                       14   1705          80
  Mammals                              0    459          45
  Marine invertebrates/plants          0    104           0
  Plant                                1     80         167
  Reptiles                             1      0           3

With all covariates (Bowler for human)

# the cases we can compare
apply(trends[, .(Jtutrendrem0, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, temptrend.sc, mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)], MARGIN = 2, FUN = function(x) sum(!is.na(x)))
    Jtutrendrem0            REALM       tempave.sc tempave_metab.sc          seas.sc     microclim.sc 
           39195            39195            36747            36747            36747            38291 
    temptrend.sc          mass.sc         speed.sc      lifespan.sc  consumerfrac.sc endothermfrac.sc 
           36747            39114            39082            38045            39195            39195 
         nspp.sc  thermal_bias.sc           npp.sc           veg.sc  human_bowler.sc 
           39195            36286            39089            39099            39195 
i <- trends[, complete.cases(Jtutrendrem0, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, temptrend.sc, mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]
cat('Overall # time-series: ', sum(i), '\n')
Overall # time-series:  36017 
cat('# studies: ', trends[i, length(unique(STUDY_ID))], '\n')
# studies:  231 
cat('Data points: ', trends[i, sum(nyrBT)], '\n')
Data points:  243237 
trends[i, table(REALM)]
REALM
 Freshwater      Marine Terrestrial 
        608       33098        2311 
trends[i, table(taxa_mod)]
taxa_mod
                        All                  Amphibians                     Benthos                       Birds 
                       1422                          12                        4288                        7198 
                       Fish               Invertebrates                     Mammals Marine invertebrates/plants 
                      20810                        1517                         495                         104 
                      Plant                    Reptiles 
                        169                           2 
trends[i, table(taxa_mod, REALM)]
                             REALM
taxa_mod                      Freshwater Marine Terrestrial
  All                                  0   1420           2
  Amphibians                           2      0          10
  Benthos                              0   4288           0
  Birds                                0   5116        2082
  Fish                               597  20213           0
  Invertebrates                        8   1443          66
  Mammals                              0    459          36
  Marine invertebrates/plants          0    104           0
  Plant                                1     55         113
  Reptiles                             0      0           2

Choose the variance structure for mixed effects models

Try combinations of

  • variance scaled to a power of the number of years in the community time-series
  • variance scaled to a power of the abs temperature trend
  • random intercept for taxa_mod
  • random intercept for STUDY_ID
  • random slope (abs temperature trend) for taxa_mod
  • random slope (abs temperature trend) for STUDY_ID
  • random intercept for rarefyID (for overdispersion)

And choose the one with lowest AIC (not run: takes a long time)

# fit models for variance structure
fixed <- formula(Jtutrendrem0 ~ temptrend_abs.sc*REALM +
                     temptrend_abs.sc*tsign + 
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend_abs.sc*thermal_bias.sc:tsign +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*veg.sc +
                     temptrend_abs.sc*duration.sc +
                     temptrend_abs.sc*human_bowler.sc:REALM2)
i <- trends[, complete.cases(Jtutrendrem0, temptrend_abs.sc, REALM, tsign, tempave_metab.sc, seas.sc, 
                             microclim.sc, mass.sc, speed.sc, consumerfrac.sc, nspp.sc,
                             thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]
mods <- vector('list', 0)
mods[[1]] <- gls(fixed, data = trends[i,])
mods[[2]] <- gls(fixed, data = trends[i,], weights = varPower(-0.5, ~nyrBT))
mods[[3]] <- gls(fixed, data = trends[i,], weights = varPower(0.5, ~temptrend_abs.sc))

mods[[4]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, control = lmeControl(opt = "optim"))
mods[[5]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, control = lmeControl(opt = "optim"))
mods[[6]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID, control = lmeControl(opt = "optim"))
mods[[7]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, control = lmeControl(opt = "optim"))
mods[[8]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, control = lmeControl(opt = "optim"))

mods[[9]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | taxa_mod)
mods[[10]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)) # includes overdispersion. new formula so that random slope is only for study level (not enough data to extend to rarefyID).

mods[[11]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT))
mods[[12]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ 1, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT))

aics <- sapply(mods, AIC)
minaics <- aics - min(aics)
minaics
which.min(aics)

Chooses the random slopes (temptrend_abs) & intercepts for STUDY_ID, overdispersion, and variance scaled to number of years. We haven’t dealt with potential testing on the boundary issues here yet.

Results

Where do we have data?

world <- map_data('world')
ggplot(world, aes(x = long, y = lat, group = group)) +
    geom_polygon(fill = 'lightgray', color = 'white') +
    geom_point(data = trends, aes(rarefyID_x, rarefyID_y, group = REALM, color = REALM), size = 0.5, alpha = 0.4)  +
    scale_color_brewer(palette="Set1", name = 'Realm') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=16),
        axis.title=element_text(size=20)) +
  labs(x = 'Longitude (°)', y = 'Latitude (°)')

Mostly northern hemisphere, but spread all over. Not so much in Africa or much of Asia.

##Average rates of turnover (without year 1)

trends[abs(temptrend) >= 0.5, temptrendtext1 := 'Changing']
trends[abs(temptrend) <= 0.05, temptrendtext1 := 'Stable']
trends[temptrend <= -0.5, temptrendtext2 := 'Cooling']
trends[abs(temptrend) <= 0.05, temptrendtext2 := 'Stable']
trends[temptrend >= 0.5, temptrendtext2 := 'Warming']

trendsum1 <- trends[!is.na(temptrendtext1), 
                    .(type = 'Jtu', 
                      ave = mean(Jtutrendrem0, na.rm=TRUE), 
                      se = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N),
                      n = sum(!is.na(Jtutrendrem0))),
                    by = temptrendtext1] # turnover per year for locations changing temperature
trendsum1 <- rbind(trendsum1, trends[!is.na(temptrendtext1), 
                    .(type = 'Jbeta', 
                      ave = mean(Jbetatrendrem0, na.rm=TRUE), 
                      se = sd(Jbetatrendrem0, na.rm=TRUE)/sqrt(.N),
                      n = sum(!is.na(Jbetatrendrem0))),
                    by = temptrendtext1])
trendsum1 <- rbind(trendsum1, trends[!is.na(temptrendtext1), 
                    .(type = 'Horn', 
                      ave = mean(Horntrendrem0, na.rm=TRUE), 
                      se = sd(Horntrendrem0, na.rm=TRUE)/sqrt(.N),
                      n = sum(!is.na(Horntrendrem0))),
                    by = temptrendtext1])

trendsum2 <- trends[!is.na(temptrendtext2), 
                    .(type = 'Jtu', 
                      ave = mean(Jtutrendrem0, na.rm=TRUE), 
                      se = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N),
                      n = sum(!is.na(Jtutrendrem0))),
                    by = temptrendtext2] # turnover per year for locations changing temperature (inc. direction)
trendsum2 <- rbind(trendsum2, trends[!is.na(temptrendtext2), 
                    .(type = 'Jbeta', 
                      ave = mean(Jbetatrendrem0, na.rm=TRUE), 
                      se = sd(Jbetatrendrem0, na.rm=TRUE)/sqrt(.N),
                      n = sum(!is.na(Jbetatrendrem0))),
                    by = temptrendtext2])
trendsum2 <- rbind(trendsum2, trends[!is.na(temptrendtext2), 
                    .(type = 'Horn', 
                      ave = mean(Horntrendrem0, na.rm=TRUE), 
                      se = sd(Horntrendrem0, na.rm=TRUE)/sqrt(.N),
                      n = sum(!is.na(Horntrendrem0))),
                    by = temptrendtext2])



trendsum1
trendsum2

Plots of turnover rates

p1 <- ggplot(trends[!is.na(temptrendtext1), ], aes(temptrendtext1, Horntrendrem0)) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75), fill = 'grey') +
  labs(x = '', y = 'Turnover', tag = 'A', title = 'Rate of temperature change') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=8),
        axis.title=element_text(size=10)) +
  geom_abline(intercept = 0, slope = 0)

p2 <- ggplot(trends[!is.na(temptrendtext2), ], aes(temptrendtext2, Horntrendrem0)) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75), fill = 'grey') +
  labs(x = '', y = 'Turnover', tag = 'A', title = 'Rate of temperature change') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=8),
        axis.title=element_text(size=10)) +
  geom_abline(intercept = 0, slope = 0)

p3 <- ggplot(trendsum1, aes(temptrendtext1, ave, group = type, color = type)) +
  geom_point(position = position_dodge(width = 0.25), size = 0.5) +
  geom_errorbar(aes(ymin=ave-se, ymax=ave+se), width=.1, position = position_dodge(width = 0.25)) +
  labs(x = '', y = 'Temporal turnover', title = 'Jaccard turnover') +
  geom_abline(intercept = 0, slope = 0, linetype = 'dashed') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=8),
        axis.title=element_text(size=10)) +
  coord_cartesian(ylim = c(0,0.04))

p4 <- ggplot(trendsum2, aes(temptrendtext2, ave, group = type, color = type)) +
  geom_point(position = position_dodge(width = 0.25), size = 0.5) +
  geom_errorbar(aes(ymin=ave-se, ymax=ave+se), width=.1, position = position_dodge(width = 0.25)) +
  labs(x = '', y = 'Temporal turnover', title = 'Jaccard turnover') +
  geom_abline(intercept = 0, slope = 0, linetype = 'dashed') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=8),
        axis.title=element_text(size=10))

grid.arrange(p1, p2, p3, p4, ncol = 2)

Temperature-only model (Jtutrend, Jbetatrend, Horntrend)

i4 <- trends[, complete.cases(Jtutrendrem0, REALM, temptrend)]

randef <- list(STUDY_ID = ~ abs(temptrend), rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modonlyTtrendrem0.rds')){
  modonlyTtrendrem0 <- readRDS('temp/modonlyTtrendrem0.rds')
} else {
  modonlyTtrendrem0 <- lme(Jtutrendrem0 ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i4,], method = 'REML')
  saveRDS(modonlyTtrendrem0, file = 'temp/modonlyTtrendrem0.rds')
}

i5 <- trends[, complete.cases(Jbetatrendrem0, REALM, temptrend)]
if(file.exists('temp/modonlyTtrendJbetarem0.rds')){
  modonlyTtrendJbetarem0 <- readRDS('temp/modonlyTtrendJbetarem0.rds')
} else {
  modonlyTtrendJbetarem0 <- lme(Jbetatrendrem0 ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i5,], method = 'REML', 
                   control=lmeControl(msMaxIter = 100, maxIter = 100))
  saveRDS(modonlyTtrendJbetarem0, file = 'temp/modonlyTtrendJbetarem0.rds')
}

i6 <- trends[, complete.cases(Horntrendrem0, REALM, temptrend)]
if(file.exists('temp/modonlyTtrendHornrem0.rds')){
  modonlyTtrendHornrem0 <- readRDS('temp/modonlyTtrendHornrem0.rds')
} else {
  modonlyTtrendHornrem0 <- lme(Horntrendrem0 ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i6,], method = 'REML')
  saveRDS(modonlyTtrendHornrem0, file = 'temp/modonlyTtrendHornrem0.rds')
}

summary(modonlyTtrendrem0)
Linear mixed-effects model fit by REML
 Data: trends[i4, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev      Corr  
(Intercept)    0.007657053 (Intr)
abs(temptrend) 0.197650298 -0.935

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01097849 2.000161

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.121022 
Fixed effects: Jtutrendrem0 ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.807                                
REALMMarine                     -0.947  0.764                         
REALMTerrestrial                -0.901  0.727  0.853                  
abs(temptrend):REALMMarine       0.766 -0.949 -0.814 -0.690           
abs(temptrend):REALMTerrestrial  0.733 -0.908 -0.693 -0.810  0.862    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-6.57101792 -0.22892007 -0.01904447  0.27434430  5.64177564 

Number of Observations: 36747
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   292                  36747 
summary(modonlyTtrendJbetarem0)
Linear mixed-effects model fit by REML
 Data: trends[i5, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev      Corr  
(Intercept)    0.005965236 (Intr)
abs(temptrend) 0.160013131 -0.038

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.003861919 0.9688156

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.887978 
Fixed effects: Jbetatrendrem0 ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.543                                
REALMMarine                     -0.941  0.511                         
REALMTerrestrial                -0.906  0.492  0.852                  
abs(temptrend):REALMMarine       0.515 -0.948 -0.524 -0.467           
abs(temptrend):REALMTerrestrial  0.494 -0.908 -0.464 -0.542  0.861    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.57430409 -0.30896466 -0.02462766  0.32539894  8.23224466 

Number of Observations: 36747
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   292                  36747 
summary(modonlyTtrendHornrem0)
Linear mixed-effects model fit by REML
 Data: trends[i6, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev     Corr  
(Intercept)    0.01201968 (Intr)
abs(temptrend) 0.25314398 0.016 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01882813 2.441788

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.318769 
Fixed effects: Horntrendrem0 ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.472                                
REALMMarine                     -0.944  0.446                         
REALMTerrestrial                -0.899  0.424  0.848                  
abs(temptrend):REALMMarine       0.447 -0.945 -0.455 -0.401           
abs(temptrend):REALMTerrestrial  0.428 -0.906 -0.404 -0.473  0.856    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.75457482 -0.22483445 -0.02254226  0.23615730  5.73488343 

Number of Observations: 36005
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   257                  36005 

Plot the temp-only coefficients

colors <- brewer.pal(3, 'Dark2')

# make table of coefficients
coefs1 <- as.data.frame(summary(modonlyTtrendrem0)$tTable)
coefs2 <- as.data.frame(summary(modonlyTtrendJbetarem0)$tTable)
coefs3 <- as.data.frame(summary(modonlyTtrendHornrem0)$tTable)
coefs1$mod <- 'Jtu'
coefs2$mod <- 'Jbeta'
coefs3$mod <- 'Horn'
rows1 <- which(grepl('temptrend', rownames(coefs1))) # extract temperature effect
cols <- c('Value', 'Std.Error', 'mod')
allcoefs <- rbind(coefs1[rows1, cols], coefs2[rows1, cols], coefs3[rows1, cols])
allcoefs$Value[grepl('REALMMarine', rownames(allcoefs))] <- 
  allcoefs$Value[grepl('REALMMarine', rownames(allcoefs))] + 
  allcoefs$Value[!grepl('REALM', rownames(allcoefs))] # add intercept to marine effects
allcoefs$Value[grepl('REALMTerrestrial', rownames(allcoefs))] <- 
  allcoefs$Value[grepl('REALMTerrestrial', rownames(allcoefs))] + 
  allcoefs$Value[!grepl('REALM', rownames(allcoefs))] # add intercept to terrestrial effects

allcoefs$lCI <- allcoefs$Value - allcoefs$Std.Error # lower confidence interval
allcoefs$uCI <- allcoefs$Value + allcoefs$Std.Error
allcoefs$y <- c(3, 2, 1) + rep(c(0, -0.1, -0.2), c(3, 3, 3)) # y-values
allcoefs$col <- c(rep(colors[1], 3), rep(colors[2], 3), rep(colors[3], 3))
allcoefs$realm <- rep(c('Freshwater', 'Marine', 'Terrestrial'), 3)

par(las = 1, mai = c(0.8, 2, 0.1, 0.1))
plot(0,0, col = 'white', xlim=c(-0.1, 0.85), ylim = c(0.5,3), 
     yaxt='n', xlab = 'Turnover per |°C/yr|', ylab ='')
axis(2, at = 3:1, labels = c('Freshwater', 'Marine', 'Terrestrial'), cex.axis = 0.7)
abline(v = 0, col = 'grey')
for(i in 1:nrow(allcoefs)){
  with(allcoefs[i, ], points(Value, y, pch = 16, col = col))
  with(allcoefs[i, ], lines(x = c(lCI, uCI), y = c(y, y), col = col))
}
legend('bottomright', col = colors, lwd = 1, pch = 16, 
       legend = c('Jaccard turnover', 'Jaccard total', 'Horn-Morisita',
                  'Jaccard turnover rem0', 'Jaccard total rem0', 'Horn-Morisita rem0'))

Full models

Try static covariates plus interactions of abs temperature trend with each covariate:

  • realm
  • speed
  • mass
  • average metabolic temperature
  • consumer fraction
  • environmental temperature
  • seasonality
  • microclimates
  • thermal bias
  • NPP
  • vegetation
  • duration
  • human footprint

Except for thermal bias: interact with temperature trend (not abs)

Fit/load full models

Bowler vs Venter/Halpern human impact

Bowler has lower AIC.

# using Bowler for human impact
i1 <- trends[, complete.cases(Jtutrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc, human_footprint.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modTfullbowlerrem0.rds')){
  modTfullbowlerrem0 <- readRDS('temp/modTfullbowlerrem0.rds')
} else {

modTfullbowlerrem0 <- lme(Jtutrendrem0 ~ temptrend_abs.sc*REALM +
                     temptrend_abs.sc*tsign + 
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend_abs.sc*thermal_bias.sc:tsign +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*veg.sc +
                     temptrend_abs.sc*duration.sc +
                     temptrend_abs.sc*human_bowler.sc:REALM2,
                   random = randef, weights = varef, data = trends[i1,], method = 'REML')
  saveRDS(modTfullbowlerrem0, file = 'temp/modTfullbowlerrem0.rds')
}

# using Venter/Halpern for human impact
if(file.exists('temp/modTfullfootprintrem0.rds')){
  modTfullfootprintrem0 <- readRDS('temp/modTfullfootprintrem0.rds')
} else {
modTfullfootprintrem0 <- lme(Jtutrendrem0 ~ temptrend_abs.sc*REALM + 
                     temptrend_abs.sc*tsign + 
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend_abs.sc*thermal_bias.sc:tsign +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*veg.sc +
                     temptrend_abs.sc*duration.sc +
                     temptrend_abs.sc*human_footprint.sc:REALM2,
                   random = randef, weights = varef, data = trends[i1,], method = 'REML',
                   control = lmeControl(maxIter = 100, msMaxIter = 100, niterEM = 50, msMaxEval = 500))
  saveRDS(modTfullfootprintrem0, file = 'temp/modTfullfootprintrem0.rds')

}
AIC(modTfullbowlerrem0, modTfullfootprintrem0)
NA

Full models

i1 <- trends[, complete.cases(Jtutrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc)]
i2 <- trends[, complete.cases(Jbetatrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc)]
i3 <- trends[, complete.cases(Horntrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

# full models
if(file.exists('temp/modTfullJturem0.rds')){
  modTfullJturem0 <- readRDS('temp/modTfullJturem0.rds')
} else {
  modTfullJturem0 <- lme(Jtutrendrem0 ~ temptrend_abs.sc*REALM + 
                         temptrend_abs.sc*tsign +
                         temptrend_abs.sc*tempave_metab.sc + 
                         temptrend_abs.sc*seas.sc + 
                         temptrend_abs.sc*microclim.sc + 
                         temptrend_abs.sc*mass.sc + 
                         temptrend_abs.sc*speed.sc + 
                         temptrend_abs.sc*consumerfrac.sc +
                         temptrend_abs.sc*nspp.sc +
                         temptrend_abs.sc*thermal_bias.sc:tsign +
                         temptrend_abs.sc*npp.sc +
                         temptrend_abs.sc*veg.sc +
                         temptrend_abs.sc*duration.sc +
                         temptrend_abs.sc*human_bowler.sc:REALM2,
                       random = randef, weights = varef, data = trends[i2,], method = 'REML')
  saveRDS(modTfullJturem0, file = 'temp/modTfullJturem0.rds')
}

if(file.exists('temp/modTfullJbetarem0.rds')){
  modTfullJbetarem0 <- readRDS('temp/modTfullJbetarem0.rds')
} else {
  modTfullJbetarem0 <- lme(Jbetatrendrem0 ~ temptrend_abs.sc*REALM + 
                         temptrend_abs.sc*tsign +
                         temptrend_abs.sc*tempave_metab.sc + 
                         temptrend_abs.sc*seas.sc + 
                         temptrend_abs.sc*microclim.sc + 
                         temptrend_abs.sc*mass.sc + 
                         temptrend_abs.sc*speed.sc + 
                         temptrend_abs.sc*consumerfrac.sc +
                         temptrend_abs.sc*nspp.sc +
                         temptrend_abs.sc*thermal_bias.sc:tsign +
                         temptrend_abs.sc*npp.sc +
                         temptrend_abs.sc*veg.sc +
                         temptrend_abs.sc*duration.sc +
                         temptrend_abs.sc*human_bowler.sc:REALM2,
                       random = randef, weights = varef, data = trends[i2,], method = 'REML')
  saveRDS(modTfullJbetarem0, file = 'temp/modTfullJbetarem0.rds')
}

if(file.exists('temp/modTfullHornrem0.rds')){
  modTfullHornrem0 <- readRDS('temp/modTfullHornrem0.rds')
} else {
  modTfullHornrem0 <- lme(Horntrendrem0 ~ temptrend_abs.sc*REALM + 
                        temptrend_abs.sc*tsign +
                        temptrend_abs.sc*tempave_metab.sc + 
                        temptrend_abs.sc*seas.sc + 
                        temptrend_abs.sc*microclim.sc + 
                        temptrend_abs.sc*mass.sc + 
                        temptrend_abs.sc*speed.sc + 
                        temptrend_abs.sc*consumerfrac.sc +
                        temptrend_abs.sc*nspp.sc +
                        temptrend_abs.sc*thermal_bias.sc:tsign +
                        temptrend_abs.sc*npp.sc +
                        temptrend_abs.sc*veg.sc +
                        temptrend_abs.sc*duration.sc +
                        temptrend_abs.sc*human_bowler.sc:REALM2,
                      random = randef, weights = varef, data = trends[i3,], method = 'REML')
  saveRDS(modTfullHornrem0, file = 'temp/modTfullHornrem0.rds')
}

summary(modTfullJturem0)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.009402743 (Intr)
temptrend_abs.sc 0.024575808 -0.966

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01091239 2.006389

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.129145 
Fixed effects: Jtutrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc *      seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc *      mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * nspp.sc + temptrend_abs.sc *      thermal_bias.sc:tsign + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      veg.sc + temptrend_abs.sc * duration.sc + temptrend_abs.sc *      human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv_. ses.sc mcrcl. mss.sc
temptrend_abs.sc                                 -0.797                                                        
REALMMarine                                      -0.955  0.757                                                 
REALMTerrestrial                                 -0.683  0.574  0.634                                          
tsign1                                           -0.095  0.063  0.007  0.012                                   
tempave_metab.sc                                  0.061 -0.037 -0.053 -0.242  0.074                            
seas.sc                                          -0.150  0.143  0.202 -0.097 -0.070  0.138                     
microclim.sc                                     -0.068  0.047  0.077  0.006  0.015 -0.157  0.097              
mass.sc                                           0.061 -0.042 -0.036 -0.038 -0.019  0.100  0.127 -0.001       
speed.sc                                          0.107 -0.093 -0.057 -0.084 -0.073 -0.194 -0.055  0.070 -0.437
consumerfrac.sc                                  -0.028  0.022  0.017  0.133  0.014 -0.135 -0.055  0.017  0.016
nspp.sc                                           0.020  0.000 -0.074 -0.066  0.049 -0.154 -0.037 -0.113 -0.010
npp.sc                                            0.041 -0.044 -0.061  0.054  0.041  0.037 -0.136 -0.187 -0.027
veg.sc                                           -0.578  0.387  0.599  0.024 -0.006  0.007  0.080 -0.010  0.021
duration.sc                                      -0.037  0.008  0.032  0.016 -0.160  0.085 -0.006 -0.016 -0.057
temptrend_abs.sc:REALMMarine                      0.764 -0.951 -0.804 -0.534 -0.014  0.030 -0.184 -0.056  0.020
temptrend_abs.sc:REALMTerrestrial                 0.542 -0.693 -0.499 -0.820 -0.018  0.182  0.078  0.024  0.033
temptrend_abs.sc:tsign1                           0.067 -0.140 -0.022 -0.014 -0.507 -0.056  0.012 -0.006 -0.005
temptrend_abs.sc:tempave_metab.sc                -0.037  0.042  0.028  0.171 -0.058 -0.788 -0.106  0.091 -0.066
temptrend_abs.sc:seas.sc                          0.145 -0.158 -0.183  0.095  0.053 -0.100 -0.777 -0.099 -0.081
temptrend_abs.sc:microclim.sc                     0.038 -0.062 -0.047  0.020 -0.014  0.088 -0.068 -0.760  0.028
temptrend_abs.sc:mass.sc                         -0.040  0.048  0.010  0.020 -0.002 -0.086 -0.066  0.019 -0.701
temptrend_abs.sc:speed.sc                        -0.084  0.104  0.040  0.073  0.069  0.167  0.031 -0.041  0.266
temptrend_abs.sc:consumerfrac.sc                  0.030 -0.037 -0.018 -0.117 -0.007  0.105  0.038  0.009  0.006
temptrend_abs.sc:nspp.sc                          0.009  0.008  0.038  0.037 -0.033  0.143  0.035  0.069  0.033
tsign-1:thermal_bias.sc                           0.061 -0.041 -0.057 -0.046 -0.078  0.132 -0.217 -0.015 -0.043
tsign1:thermal_bias.sc                            0.095 -0.074 -0.103 -0.097  0.063  0.223 -0.330 -0.100 -0.043
temptrend_abs.sc:npp.sc                          -0.039  0.065  0.059 -0.051 -0.028 -0.007  0.116  0.168 -0.004
temptrend_abs.sc:veg.sc                           0.411 -0.507 -0.431  0.022 -0.008 -0.018 -0.115  0.003 -0.018
                                                 spd.sc cnsmr. nspp.s npp.sc veg.sc drtn.s t_.:REALMM t_.:REALMT
temptrend_abs.sc                                                                                                
REALMMarine                                                                                                     
REALMTerrestrial                                                                                                
tsign1                                                                                                          
tempave_metab.sc                                                                                                
seas.sc                                                                                                         
microclim.sc                                                                                                    
mass.sc                                                                                                         
speed.sc                                                                                                        
consumerfrac.sc                                  -0.144                                                         
nspp.sc                                           0.184  0.094                                                  
npp.sc                                            0.125 -0.045 -0.188                                           
veg.sc                                           -0.019 -0.010  0.024 -0.178                                    
duration.sc                                      -0.009  0.005 -0.252  0.062 -0.012                             
temptrend_abs.sc:REALMMarine                      0.047 -0.015  0.046  0.064 -0.406 -0.018                      
temptrend_abs.sc:REALMTerrestrial                 0.068 -0.104  0.025 -0.047  0.019 -0.005  0.639               
temptrend_abs.sc:tsign1                           0.041 -0.007 -0.029 -0.038 -0.018  0.031  0.044      0.011    
temptrend_abs.sc:tempave_metab.sc                 0.134  0.116  0.154 -0.031 -0.012 -0.031 -0.027     -0.228    
temptrend_abs.sc:seas.sc                          0.032  0.029  0.038  0.123 -0.109 -0.027  0.207     -0.162    
temptrend_abs.sc:microclim.sc                    -0.055  0.002  0.074  0.183  0.006  0.011  0.077     -0.051    
temptrend_abs.sc:mass.sc                          0.315  0.008  0.031 -0.007 -0.007  0.044 -0.014     -0.004    
temptrend_abs.sc:speed.sc                        -0.717  0.085 -0.165 -0.064 -0.006  0.001 -0.055     -0.094    
temptrend_abs.sc:consumerfrac.sc                  0.120 -0.773 -0.069  0.022  0.005 -0.035  0.021      0.127    
temptrend_abs.sc:nspp.sc                         -0.159 -0.046 -0.749  0.118 -0.037  0.195 -0.070     -0.068    
tsign-1:thermal_bias.sc                          -0.006 -0.001 -0.035  0.001 -0.012  0.083  0.050      0.034    
tsign1:thermal_bias.sc                           -0.009 -0.024 -0.044 -0.057  0.000  0.084  0.073      0.084    
temptrend_abs.sc:npp.sc                          -0.064  0.004  0.113 -0.741  0.143 -0.043 -0.103      0.085    
temptrend_abs.sc:veg.sc                           0.010  0.011 -0.024  0.173 -0.733  0.003  0.537     -0.033    
                                                 tm_.:1 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                                   
REALMMarine                                                                                        
REALMTerrestrial                                                                                   
tsign1                                                                                             
tempave_metab.sc                                                                                   
seas.sc                                                                                            
microclim.sc                                                                                       
mass.sc                                                                                            
speed.sc                                                                                           
consumerfrac.sc                                                                                    
nspp.sc                                                                                            
npp.sc                                                                                             
veg.sc                                                                                             
duration.sc                                                                                        
temptrend_abs.sc:REALMMarine                                                                       
temptrend_abs.sc:REALMTerrestrial                                                                  
temptrend_abs.sc:tsign1                                                                            
temptrend_abs.sc:tempave_metab.sc                 0.052                                            
temptrend_abs.sc:seas.sc                         -0.021  0.109                                     
temptrend_abs.sc:microclim.sc                     0.020 -0.040   0.113                             
temptrend_abs.sc:mass.sc                          0.001  0.168   0.052            -0.043           
temptrend_abs.sc:speed.sc                        -0.035 -0.331  -0.003             0.043           
temptrend_abs.sc:consumerfrac.sc                  0.032 -0.124  -0.063            -0.027           
temptrend_abs.sc:nspp.sc                          0.029 -0.138  -0.040            -0.043           
tsign-1:thermal_bias.sc                          -0.042 -0.114   0.159             0.007           
tsign1:thermal_bias.sc                            0.001 -0.216   0.205             0.042           
temptrend_abs.sc:npp.sc                           0.003  0.030  -0.182            -0.312           
temptrend_abs.sc:veg.sc                           0.052  0.004   0.149             0.028           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:c.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
consumerfrac.sc                                                                                      
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
duration.sc                                                                                          
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                        -0.475                                              
temptrend_abs.sc:consumerfrac.sc                 -0.043            -0.120                            
temptrend_abs.sc:nspp.sc                          0.003             0.183             0.085          
tsign-1:thermal_bias.sc                           0.021             0.018            -0.005          
tsign1:thermal_bias.sc                            0.007             0.030             0.020          
temptrend_abs.sc:npp.sc                           0.039             0.037            -0.017          
temptrend_abs.sc:veg.sc                           0.004             0.000            -0.011          
                                                 tmptrnd_bs.sc:ns. t-1:_. ts1:_. tmptrnd_bs.sc:np.
temptrend_abs.sc                                                                                  
REALMMarine                                                                                       
REALMTerrestrial                                                                                  
tsign1                                                                                            
tempave_metab.sc                                                                                  
seas.sc                                                                                           
microclim.sc                                                                                      
mass.sc                                                                                           
speed.sc                                                                                          
consumerfrac.sc                                                                                   
nspp.sc                                                                                           
npp.sc                                                                                            
veg.sc                                                                                            
duration.sc                                                                                       
temptrend_abs.sc:REALMMarine                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                 
temptrend_abs.sc:tsign1                                                                           
temptrend_abs.sc:tempave_metab.sc                                                                 
temptrend_abs.sc:seas.sc                                                                          
temptrend_abs.sc:microclim.sc                                                                     
temptrend_abs.sc:mass.sc                                                                          
temptrend_abs.sc:speed.sc                                                                         
temptrend_abs.sc:consumerfrac.sc                                                                  
temptrend_abs.sc:nspp.sc                                                                          
tsign-1:thermal_bias.sc                           0.018                                           
tsign1:thermal_bias.sc                            0.032             0.357                         
temptrend_abs.sc:npp.sc                          -0.114            -0.002  0.055                  
temptrend_abs.sc:veg.sc                           0.017             0.020 -0.012 -0.250           
                                                 tmptrnd_bs.sc:v. tmptrnd_bs.sc:d. h_.:REALM2T h_.:REALM2M t_.:-1
temptrend_abs.sc                                                                                                 
REALMMarine                                                                                                      
REALMTerrestrial                                                                                                 
tsign1                                                                                                           
tempave_metab.sc                                                                                                 
seas.sc                                                                                                          
microclim.sc                                                                                                     
mass.sc                                                                                                          
speed.sc                                                                                                         
consumerfrac.sc                                                                                                  
nspp.sc                                                                                                          
npp.sc                                                                                                           
veg.sc                                                                                                           
duration.sc                                                                                                      
temptrend_abs.sc:REALMMarine                                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                                
temptrend_abs.sc:tsign1                                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                                
temptrend_abs.sc:seas.sc                                                                                         
temptrend_abs.sc:microclim.sc                                                                                    
temptrend_abs.sc:mass.sc                                                                                         
temptrend_abs.sc:speed.sc                                                                                        
temptrend_abs.sc:consumerfrac.sc                                                                                 
temptrend_abs.sc:nspp.sc                                                                                         
tsign-1:thermal_bias.sc                                                                                          
tsign1:thermal_bias.sc                                                                                           
temptrend_abs.sc:npp.sc                                                                                          
temptrend_abs.sc:veg.sc                                                                                          
                                                 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                      
REALMMarine                                                           
REALMTerrestrial                                                      
tsign1                                                                
tempave_metab.sc                                                      
seas.sc                                                               
microclim.sc                                                          
mass.sc                                                               
speed.sc                                                              
consumerfrac.sc                                                       
nspp.sc                                                               
npp.sc                                                                
veg.sc                                                                
duration.sc                                                           
temptrend_abs.sc:REALMMarine                                          
temptrend_abs.sc:REALMTerrestrial                                     
temptrend_abs.sc:tsign1                                               
temptrend_abs.sc:tempave_metab.sc                                     
temptrend_abs.sc:seas.sc                                              
temptrend_abs.sc:microclim.sc                                         
temptrend_abs.sc:mass.sc                                              
temptrend_abs.sc:speed.sc                                             
temptrend_abs.sc:consumerfrac.sc                                      
temptrend_abs.sc:nspp.sc                                              
tsign-1:thermal_bias.sc                                               
tsign1:thermal_bias.sc                                                
temptrend_abs.sc:npp.sc                                               
temptrend_abs.sc:veg.sc                                               
 [ reached getOption("max.print") -- omitted 7 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-6.64180587 -0.23617979 -0.02235224  0.26661608  5.42260805 

Number of Observations: 36017
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   231                  36017 
summary(modTfullJbetarem0)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.00722145 (Intr)
temptrend_abs.sc 0.01729128 -0.058

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.003744118 0.9597427

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.892596 
Fixed effects: Jbetatrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc *      seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc *      mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * nspp.sc + temptrend_abs.sc *      thermal_bias.sc:tsign + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      veg.sc + temptrend_abs.sc * duration.sc + temptrend_abs.sc *      human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv_. ses.sc mcrcl. mss.sc
temptrend_abs.sc                                 -0.573                                                        
REALMMarine                                      -0.947  0.551                                                 
REALMTerrestrial                                 -0.752  0.385  0.701                                          
tsign1                                           -0.084  0.047  0.004  0.001                                   
tempave_metab.sc                                  0.100 -0.026 -0.084 -0.244  0.098                            
seas.sc                                          -0.131  0.077  0.178 -0.069 -0.074  0.088                     
microclim.sc                                     -0.078  0.060  0.090  0.022 -0.001 -0.183  0.138              
mass.sc                                           0.095 -0.010 -0.071 -0.043  0.001  0.089  0.091  0.007       
speed.sc                                          0.081 -0.063 -0.041 -0.088 -0.086 -0.110 -0.014  0.039 -0.493
consumerfrac.sc                                  -0.012  0.017  0.010  0.096 -0.022 -0.105 -0.031  0.020  0.012
nspp.sc                                           0.007 -0.032 -0.062 -0.038  0.049 -0.200 -0.033 -0.135 -0.054
npp.sc                                            0.025 -0.013 -0.040  0.032  0.066  0.073 -0.077 -0.140 -0.028
veg.sc                                           -0.442  0.365  0.462  0.011 -0.014 -0.003  0.073 -0.003  0.018
duration.sc                                      -0.041  0.009  0.031 -0.003 -0.144  0.129 -0.003 -0.024 -0.042
temptrend_abs.sc:REALMMarine                      0.554 -0.951 -0.570 -0.361 -0.009  0.023 -0.099 -0.066  0.000
temptrend_abs.sc:REALMTerrestrial                 0.377 -0.740 -0.350 -0.552  0.001  0.148  0.116  0.024 -0.011
temptrend_abs.sc:tsign1                           0.055 -0.127 -0.022  0.002 -0.442 -0.055  0.003 -0.006 -0.004
temptrend_abs.sc:tempave_metab.sc                -0.001  0.056 -0.009  0.132 -0.104 -0.539 -0.130  0.018 -0.066
temptrend_abs.sc:seas.sc                          0.079 -0.108 -0.106  0.104  0.050 -0.090 -0.726 -0.122 -0.063
temptrend_abs.sc:microclim.sc                     0.053 -0.078 -0.061  0.002 -0.009  0.112 -0.091 -0.780  0.012
temptrend_abs.sc:mass.sc                         -0.018  0.040  0.012 -0.009 -0.004 -0.077 -0.056  0.024 -0.577
temptrend_abs.sc:speed.sc                        -0.070  0.093  0.057  0.080  0.074  0.129  0.055 -0.019  0.240
temptrend_abs.sc:consumerfrac.sc                  0.010 -0.032 -0.009 -0.076  0.016  0.077  0.031  0.012  0.003
temptrend_abs.sc:nspp.sc                         -0.023  0.016  0.048  0.045 -0.026  0.119  0.035  0.070  0.011
tsign-1:thermal_bias.sc                           0.066 -0.022 -0.062 -0.049 -0.068  0.135 -0.240 -0.022 -0.040
tsign1:thermal_bias.sc                            0.122 -0.044 -0.126 -0.104  0.066  0.252 -0.437 -0.133 -0.017
temptrend_abs.sc:npp.sc                          -0.002  0.057  0.015 -0.054 -0.040 -0.016  0.065  0.155  0.001
temptrend_abs.sc:veg.sc                           0.351 -0.443 -0.367  0.020 -0.001 -0.016 -0.088 -0.009 -0.010
                                                 spd.sc cnsmr. nspp.s npp.sc veg.sc drtn.s t_.:REALMM t_.:REALMT
temptrend_abs.sc                                                                                                
REALMMarine                                                                                                     
REALMTerrestrial                                                                                                
tsign1                                                                                                          
tempave_metab.sc                                                                                                
seas.sc                                                                                                         
microclim.sc                                                                                                    
mass.sc                                                                                                         
speed.sc                                                                                                        
consumerfrac.sc                                  -0.089                                                         
nspp.sc                                           0.212  0.100                                                  
npp.sc                                            0.163 -0.052 -0.198                                           
veg.sc                                           -0.024 -0.018  0.023 -0.204                                    
duration.sc                                      -0.033  0.012 -0.240  0.077 -0.012                             
temptrend_abs.sc:REALMMarine                      0.039 -0.010  0.063  0.038 -0.386 -0.008                      
temptrend_abs.sc:REALMTerrestrial                 0.076 -0.073  0.049 -0.055  0.021  0.007  0.690               
temptrend_abs.sc:tsign1                           0.033  0.004 -0.025 -0.056 -0.025  0.020  0.040      0.006    
temptrend_abs.sc:tempave_metab.sc                 0.142  0.085  0.123 -0.020 -0.009 -0.054 -0.041     -0.239    
temptrend_abs.sc:seas.sc                          0.014  0.028  0.045  0.090 -0.086 -0.036  0.149     -0.173    
temptrend_abs.sc:microclim.sc                    -0.029 -0.008  0.083  0.167 -0.009  0.011  0.090     -0.058    
temptrend_abs.sc:mass.sc                          0.282  0.015  0.014 -0.015 -0.010  0.055 -0.003      0.016    
temptrend_abs.sc:speed.sc                        -0.601  0.071 -0.148 -0.068  0.004  0.014 -0.042     -0.098    
temptrend_abs.sc:consumerfrac.sc                  0.080 -0.717 -0.065  0.026  0.009 -0.023  0.019      0.109    
temptrend_abs.sc:nspp.sc                         -0.153 -0.045 -0.640  0.108 -0.028  0.167 -0.078     -0.068    
tsign-1:thermal_bias.sc                           0.027  0.006 -0.048  0.004 -0.012  0.085  0.029      0.020    
tsign1:thermal_bias.sc                            0.026 -0.030 -0.081 -0.042  0.000  0.105  0.035      0.057    
temptrend_abs.sc:npp.sc                          -0.085  0.016  0.109 -0.733  0.163 -0.056 -0.093      0.085    
temptrend_abs.sc:veg.sc                           0.006  0.013 -0.026  0.181 -0.813  0.012  0.474     -0.031    
                                                 tm_.:1 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                                   
REALMMarine                                                                                        
REALMTerrestrial                                                                                   
tsign1                                                                                             
tempave_metab.sc                                                                                   
seas.sc                                                                                            
microclim.sc                                                                                       
mass.sc                                                                                            
speed.sc                                                                                           
consumerfrac.sc                                                                                    
nspp.sc                                                                                            
npp.sc                                                                                             
veg.sc                                                                                             
duration.sc                                                                                        
temptrend_abs.sc:REALMMarine                                                                       
temptrend_abs.sc:REALMTerrestrial                                                                  
temptrend_abs.sc:tsign1                                                                            
temptrend_abs.sc:tempave_metab.sc                 0.047                                            
temptrend_abs.sc:seas.sc                         -0.018  0.080                                     
temptrend_abs.sc:microclim.sc                     0.009  0.029   0.157                             
temptrend_abs.sc:mass.sc                          0.009  0.140   0.042            -0.046           
temptrend_abs.sc:speed.sc                        -0.031 -0.308   0.027             0.032           
temptrend_abs.sc:consumerfrac.sc                  0.018 -0.106  -0.070            -0.031           
temptrend_abs.sc:nspp.sc                          0.024 -0.134  -0.035            -0.050           
tsign-1:thermal_bias.sc                          -0.046 -0.045   0.153             0.009           
tsign1:thermal_bias.sc                            0.016 -0.124   0.210             0.051           
temptrend_abs.sc:npp.sc                           0.025  0.053  -0.193            -0.305           
temptrend_abs.sc:veg.sc                           0.047 -0.014   0.141             0.056           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:c.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
consumerfrac.sc                                                                                      
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
duration.sc                                                                                          
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                        -0.446                                              
temptrend_abs.sc:consumerfrac.sc                 -0.050            -0.119                            
temptrend_abs.sc:nspp.sc                         -0.002             0.166             0.084          
tsign-1:thermal_bias.sc                           0.019            -0.008            -0.009          
tsign1:thermal_bias.sc                            0.013            -0.009             0.019          
temptrend_abs.sc:npp.sc                           0.047             0.029            -0.021          
temptrend_abs.sc:veg.sc                           0.005             0.012            -0.016          
                                                 tmptrnd_bs.sc:ns. t-1:_. ts1:_. tmptrnd_bs.sc:np.
temptrend_abs.sc                                                                                  
REALMMarine                                                                                       
REALMTerrestrial                                                                                  
tsign1                                                                                            
tempave_metab.sc                                                                                  
seas.sc                                                                                           
microclim.sc                                                                                      
mass.sc                                                                                           
speed.sc                                                                                          
consumerfrac.sc                                                                                   
nspp.sc                                                                                           
npp.sc                                                                                            
veg.sc                                                                                            
duration.sc                                                                                       
temptrend_abs.sc:REALMMarine                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                 
temptrend_abs.sc:tsign1                                                                           
temptrend_abs.sc:tempave_metab.sc                                                                 
temptrend_abs.sc:seas.sc                                                                          
temptrend_abs.sc:microclim.sc                                                                     
temptrend_abs.sc:mass.sc                                                                          
temptrend_abs.sc:speed.sc                                                                         
temptrend_abs.sc:consumerfrac.sc                                                                  
temptrend_abs.sc:nspp.sc                                                                          
tsign-1:thermal_bias.sc                           0.017                                           
tsign1:thermal_bias.sc                            0.025             0.340                         
temptrend_abs.sc:npp.sc                          -0.114             0.006  0.081                  
temptrend_abs.sc:veg.sc                           0.013             0.012 -0.026 -0.281           
                                                 tmptrnd_bs.sc:v. tmptrnd_bs.sc:d. h_.:REALM2T h_.:REALM2M t_.:-1
temptrend_abs.sc                                                                                                 
REALMMarine                                                                                                      
REALMTerrestrial                                                                                                 
tsign1                                                                                                           
tempave_metab.sc                                                                                                 
seas.sc                                                                                                          
microclim.sc                                                                                                     
mass.sc                                                                                                          
speed.sc                                                                                                         
consumerfrac.sc                                                                                                  
nspp.sc                                                                                                          
npp.sc                                                                                                           
veg.sc                                                                                                           
duration.sc                                                                                                      
temptrend_abs.sc:REALMMarine                                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                                
temptrend_abs.sc:tsign1                                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                                
temptrend_abs.sc:seas.sc                                                                                         
temptrend_abs.sc:microclim.sc                                                                                    
temptrend_abs.sc:mass.sc                                                                                         
temptrend_abs.sc:speed.sc                                                                                        
temptrend_abs.sc:consumerfrac.sc                                                                                 
temptrend_abs.sc:nspp.sc                                                                                         
tsign-1:thermal_bias.sc                                                                                          
tsign1:thermal_bias.sc                                                                                           
temptrend_abs.sc:npp.sc                                                                                          
temptrend_abs.sc:veg.sc                                                                                          
                                                 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                      
REALMMarine                                                           
REALMTerrestrial                                                      
tsign1                                                                
tempave_metab.sc                                                      
seas.sc                                                               
microclim.sc                                                          
mass.sc                                                               
speed.sc                                                              
consumerfrac.sc                                                       
nspp.sc                                                               
npp.sc                                                                
veg.sc                                                                
duration.sc                                                           
temptrend_abs.sc:REALMMarine                                          
temptrend_abs.sc:REALMTerrestrial                                     
temptrend_abs.sc:tsign1                                               
temptrend_abs.sc:tempave_metab.sc                                     
temptrend_abs.sc:seas.sc                                              
temptrend_abs.sc:microclim.sc                                         
temptrend_abs.sc:mass.sc                                              
temptrend_abs.sc:speed.sc                                             
temptrend_abs.sc:consumerfrac.sc                                      
temptrend_abs.sc:nspp.sc                                              
tsign-1:thermal_bias.sc                                               
tsign1:thermal_bias.sc                                                
temptrend_abs.sc:npp.sc                                               
temptrend_abs.sc:veg.sc                                               
 [ reached getOption("max.print") -- omitted 7 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.38434700 -0.32179127 -0.03059932  0.31554016  8.33570233 

Number of Observations: 36017
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   231                  36017 
summary(modTfullHornrem0)
Linear mixed-effects model fit by REML
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.01556817 (Intr)
temptrend_abs.sc 0.02706589 -0.065

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01880474 2.445174

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.327824 
Fixed effects: Horntrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc *      seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc *      mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * nspp.sc + temptrend_abs.sc *      thermal_bias.sc:tsign + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      veg.sc + temptrend_abs.sc * duration.sc + temptrend_abs.sc *      human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv_. ses.sc mcrcl. mss.sc
temptrend_abs.sc                                 -0.501                                                        
REALMMarine                                      -0.954  0.479                                                 
REALMTerrestrial                                 -0.737  0.361  0.685                                          
tsign1                                           -0.065  0.046 -0.001  0.011                                   
tempave_metab.sc                                  0.101 -0.030 -0.080 -0.245  0.030                            
seas.sc                                          -0.109  0.050  0.157 -0.095 -0.088  0.103                     
microclim.sc                                     -0.067  0.042  0.076  0.017  0.014 -0.185  0.101              
mass.sc                                           0.067 -0.007 -0.044 -0.030 -0.007  0.089  0.096  0.007       
speed.sc                                          0.085 -0.062 -0.039 -0.090 -0.069 -0.078 -0.011  0.059 -0.421
consumerfrac.sc                                  -0.017  0.024  0.010  0.088  0.033 -0.120 -0.052  0.016 -0.014
nspp.sc                                           0.008 -0.037 -0.051 -0.053  0.052 -0.146  0.006 -0.090 -0.060
npp.sc                                            0.026  0.001 -0.038  0.058  0.012  0.024 -0.189 -0.215 -0.036
veg.sc                                           -0.518  0.276  0.536  0.028 -0.012  0.007  0.086  0.005  0.013
duration.sc                                      -0.021  0.012  0.029  0.021 -0.149  0.077 -0.030 -0.022 -0.027
temptrend_abs.sc:REALMMarine                      0.485 -0.949 -0.497 -0.337 -0.014  0.029 -0.069 -0.049 -0.004
temptrend_abs.sc:REALMTerrestrial                 0.322 -0.727 -0.296 -0.510 -0.003  0.161  0.123  0.019 -0.017
temptrend_abs.sc:tsign1                           0.041 -0.112 -0.010  0.003 -0.490 -0.038  0.007 -0.009  0.005
temptrend_abs.sc:tempave_metab.sc                -0.008  0.041 -0.001  0.142 -0.063 -0.500 -0.094  0.047 -0.052
temptrend_abs.sc:seas.sc                          0.059 -0.087 -0.081  0.111  0.052 -0.064 -0.641 -0.093 -0.060
temptrend_abs.sc:microclim.sc                     0.029 -0.045 -0.034  0.002 -0.024  0.103 -0.051 -0.705  0.016
temptrend_abs.sc:mass.sc                         -0.010  0.023  0.005 -0.014  0.012 -0.062 -0.054  0.020 -0.580
temptrend_abs.sc:speed.sc                        -0.047  0.100  0.033  0.075  0.048  0.099  0.041 -0.036  0.222
temptrend_abs.sc:consumerfrac.sc                  0.013 -0.035 -0.012 -0.064 -0.016  0.087  0.031  0.014  0.019
temptrend_abs.sc:nspp.sc                         -0.025  0.029  0.040  0.054 -0.019  0.077  0.011  0.047  0.009
tsign-1:thermal_bias.sc                           0.060 -0.021 -0.056 -0.059 -0.088  0.204 -0.213 -0.040 -0.045
tsign1:thermal_bias.sc                            0.103 -0.035 -0.105 -0.109  0.070  0.342 -0.321 -0.140 -0.016
temptrend_abs.sc:npp.sc                           0.010  0.023 -0.006 -0.055 -0.005 -0.012  0.086  0.158 -0.004
temptrend_abs.sc:veg.sc                           0.306 -0.426 -0.317  0.025 -0.011 -0.024 -0.102  0.009 -0.013
                                                 spd.sc cnsmr. nspp.s npp.sc veg.sc drtn.s t_.:REALMM t_.:REALMT
temptrend_abs.sc                                                                                                
REALMMarine                                                                                                     
REALMTerrestrial                                                                                                
tsign1                                                                                                          
tempave_metab.sc                                                                                                
seas.sc                                                                                                         
microclim.sc                                                                                                    
mass.sc                                                                                                         
speed.sc                                                                                                        
consumerfrac.sc                                  -0.086                                                         
nspp.sc                                           0.179  0.094                                                  
npp.sc                                            0.120 -0.037 -0.198                                           
veg.sc                                           -0.005 -0.003  0.021 -0.163                                    
duration.sc                                       0.011  0.008 -0.241  0.053 -0.006                             
temptrend_abs.sc:REALMMarine                      0.035 -0.018  0.063  0.018 -0.292 -0.016                      
temptrend_abs.sc:REALMTerrestrial                 0.082 -0.062  0.062 -0.057  0.030 -0.014  0.674               
temptrend_abs.sc:tsign1                           0.031 -0.012 -0.021 -0.035 -0.008  0.033  0.035      0.006    
temptrend_abs.sc:tempave_metab.sc                 0.118  0.079  0.088 -0.044 -0.013 -0.016 -0.027     -0.273    
temptrend_abs.sc:seas.sc                          0.013  0.019  0.025  0.125 -0.089 -0.016  0.123     -0.209    
temptrend_abs.sc:microclim.sc                    -0.040 -0.007  0.051  0.172  0.014  0.011  0.057     -0.060    
temptrend_abs.sc:mass.sc                          0.245  0.026  0.011 -0.011 -0.009  0.047  0.012      0.032    
temptrend_abs.sc:speed.sc                        -0.581  0.071 -0.127 -0.042 -0.015 -0.008 -0.043     -0.109    
temptrend_abs.sc:consumerfrac.sc                  0.074 -0.719 -0.063  0.013 -0.001 -0.021  0.023      0.094    
temptrend_abs.sc:nspp.sc                         -0.134 -0.044 -0.615  0.100 -0.021  0.150 -0.081     -0.080    
tsign-1:thermal_bias.sc                           0.004 -0.007 -0.044  0.008 -0.005  0.073  0.027      0.027    
tsign1:thermal_bias.sc                           -0.022 -0.017 -0.065 -0.057 -0.007  0.085  0.028      0.053    
temptrend_abs.sc:npp.sc                          -0.058  0.005  0.098 -0.652  0.098 -0.036 -0.052      0.088    
temptrend_abs.sc:veg.sc                           0.000  0.003 -0.021  0.158 -0.620  0.002  0.456     -0.060    
                                                 tm_.:1 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                                   
REALMMarine                                                                                        
REALMTerrestrial                                                                                   
tsign1                                                                                             
tempave_metab.sc                                                                                   
seas.sc                                                                                            
microclim.sc                                                                                       
mass.sc                                                                                            
speed.sc                                                                                           
consumerfrac.sc                                                                                    
nspp.sc                                                                                            
npp.sc                                                                                             
veg.sc                                                                                             
duration.sc                                                                                        
temptrend_abs.sc:REALMMarine                                                                       
temptrend_abs.sc:REALMTerrestrial                                                                  
temptrend_abs.sc:tsign1                                                                            
temptrend_abs.sc:tempave_metab.sc                 0.036                                            
temptrend_abs.sc:seas.sc                         -0.027  0.073                                     
temptrend_abs.sc:microclim.sc                     0.005  0.021   0.115                             
temptrend_abs.sc:mass.sc                         -0.003  0.103   0.050            -0.051           
temptrend_abs.sc:speed.sc                        -0.022 -0.285   0.012             0.040           
temptrend_abs.sc:consumerfrac.sc                  0.032 -0.099  -0.060            -0.037           
temptrend_abs.sc:nspp.sc                          0.012 -0.121  -0.028            -0.020           
tsign-1:thermal_bias.sc                          -0.029 -0.061   0.132             0.022           
tsign1:thermal_bias.sc                            0.009 -0.115   0.148             0.048           
temptrend_abs.sc:npp.sc                           0.004  0.077  -0.208            -0.321           
temptrend_abs.sc:veg.sc                           0.054  0.006   0.173             0.006           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:c.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
consumerfrac.sc                                                                                      
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
duration.sc                                                                                          
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                        -0.394                                              
temptrend_abs.sc:consumerfrac.sc                 -0.060            -0.116                            
temptrend_abs.sc:nspp.sc                          0.007             0.159             0.088          
tsign-1:thermal_bias.sc                           0.020             0.003             0.002          
tsign1:thermal_bias.sc                            0.019             0.011             0.014          
temptrend_abs.sc:npp.sc                           0.052             0.013             0.000          
temptrend_abs.sc:veg.sc                           0.007             0.023            -0.006          
                                                 tmptrnd_bs.sc:ns. t-1:_. ts1:_. tmptrnd_bs.sc:np.
temptrend_abs.sc                                                                                  
REALMMarine                                                                                       
REALMTerrestrial                                                                                  
tsign1                                                                                            
tempave_metab.sc                                                                                  
seas.sc                                                                                           
microclim.sc                                                                                      
mass.sc                                                                                           
speed.sc                                                                                          
consumerfrac.sc                                                                                   
nspp.sc                                                                                           
npp.sc                                                                                            
veg.sc                                                                                            
duration.sc                                                                                       
temptrend_abs.sc:REALMMarine                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                 
temptrend_abs.sc:tsign1                                                                           
temptrend_abs.sc:tempave_metab.sc                                                                 
temptrend_abs.sc:seas.sc                                                                          
temptrend_abs.sc:microclim.sc                                                                     
temptrend_abs.sc:mass.sc                                                                          
temptrend_abs.sc:speed.sc                                                                         
temptrend_abs.sc:consumerfrac.sc                                                                  
temptrend_abs.sc:nspp.sc                                                                          
tsign-1:thermal_bias.sc                           0.014                                           
tsign1:thermal_bias.sc                            0.022             0.393                         
temptrend_abs.sc:npp.sc                          -0.100            -0.016  0.045                  
temptrend_abs.sc:veg.sc                           0.012             0.015 -0.016 -0.242           
                                                 tmptrnd_bs.sc:v. tmptrnd_bs.sc:d. h_.:REALM2T h_.:REALM2M t_.:-1
temptrend_abs.sc                                                                                                 
REALMMarine                                                                                                      
REALMTerrestrial                                                                                                 
tsign1                                                                                                           
tempave_metab.sc                                                                                                 
seas.sc                                                                                                          
microclim.sc                                                                                                     
mass.sc                                                                                                          
speed.sc                                                                                                         
consumerfrac.sc                                                                                                  
nspp.sc                                                                                                          
npp.sc                                                                                                           
veg.sc                                                                                                           
duration.sc                                                                                                      
temptrend_abs.sc:REALMMarine                                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                                
temptrend_abs.sc:tsign1                                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                                
temptrend_abs.sc:seas.sc                                                                                         
temptrend_abs.sc:microclim.sc                                                                                    
temptrend_abs.sc:mass.sc                                                                                         
temptrend_abs.sc:speed.sc                                                                                        
temptrend_abs.sc:consumerfrac.sc                                                                                 
temptrend_abs.sc:nspp.sc                                                                                         
tsign-1:thermal_bias.sc                                                                                          
tsign1:thermal_bias.sc                                                                                           
temptrend_abs.sc:npp.sc                                                                                          
temptrend_abs.sc:veg.sc                                                                                          
                                                 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                      
REALMMarine                                                           
REALMTerrestrial                                                      
tsign1                                                                
tempave_metab.sc                                                      
seas.sc                                                               
microclim.sc                                                          
mass.sc                                                               
speed.sc                                                              
consumerfrac.sc                                                       
nspp.sc                                                               
npp.sc                                                                
veg.sc                                                                
duration.sc                                                           
temptrend_abs.sc:REALMMarine                                          
temptrend_abs.sc:REALMTerrestrial                                     
temptrend_abs.sc:tsign1                                               
temptrend_abs.sc:tempave_metab.sc                                     
temptrend_abs.sc:seas.sc                                              
temptrend_abs.sc:microclim.sc                                         
temptrend_abs.sc:mass.sc                                              
temptrend_abs.sc:speed.sc                                             
temptrend_abs.sc:consumerfrac.sc                                      
temptrend_abs.sc:nspp.sc                                              
tsign-1:thermal_bias.sc                                               
tsign1:thermal_bias.sc                                                
temptrend_abs.sc:npp.sc                                               
temptrend_abs.sc:veg.sc                                               
 [ reached getOption("max.print") -- omitted 7 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.67542034 -0.23386259 -0.02454167  0.23164547  5.75602618 

Number of Observations: 35327
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   200                  35327 
rsquared(modTfullJturem0)
rsquared(modTfullJbetarem0)
rsquared(modTfullHornrem0)
NA

Plots from the full models

Plot the coefficients


coefs1 <- summary(modTfullJturem0)$tTable
coefs2 <- summary(modTfullJbetarem0)$tTable
coefs3 <- summary(modTfullHornrem0)$tTable

varstoplot <- unique(c(rownames(coefs1), rownames(coefs2), rownames(coefs3)))
varstoplot <- varstoplot[which(!grepl('Intercept', varstoplot) | grepl(':', varstoplot))] # vars to plot

rows1_1 <- which(rownames(coefs1) %in% varstoplot) # rows in coefs
rows1_2 <- which(rownames(coefs2) %in% varstoplot)
rows1_3 <- which(rownames(coefs3) %in% varstoplot)
xlims <- range(c(coefs1[rows1_1,1] - coefs1[rows1_1,2], coefs1[rows1_1,1] + coefs1[rows1_1,2], 
                  coefs2[rows1_2,1] - coefs2[rows1_2,2], coefs2[rows1_2,1] + coefs2[rows1_2,2], 
                  coefs3[rows1_3,1] - coefs3[rows1_3,2], coefs3[rows1_3,1] + coefs3[rows1_3,2]))


cols <- brewer.pal(3, 'Dark2') # for Jtu, Jbeta and Horn models
pchs <- c(16, 16, 16)
offs <- c(0.1, 0, -0.1) # offset vertically for each model


par(las = 1, mai = c(0.5, 4, 0.1, 0.1))

plot(0,0, col = 'white', xlim = xlims, ylim = c(1,length(varstoplot)), yaxt='n', xlab = '', ylab ='')
axis(2, at = length(varstoplot):1, labels = varstoplot, cex.axis = 0.7)
abline(v = 0, col = 'grey', lty = 2)
abline(h = 1:length(varstoplot), col = 'grey', lty = 3)
for(i in 1:length(varstoplot)){
  if(varstoplot[i] %in% rownames(coefs1)){
    x = coefs1[rownames(coefs1) == varstoplot[i], 1]
    se = coefs1[rownames(coefs1) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[1], pch = pchs[1], col = cols[1])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[1], length(varstoplot) + 1 - i + offs[1]), col = cols[1])
  }
  if(varstoplot[i] %in% rownames(coefs2)){
    x = coefs2[rownames(coefs2) == varstoplot[i], 1]
    se = coefs2[rownames(coefs2) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[2], pch = pchs[2], col = cols[2])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[2], length(varstoplot) + 1 - i + offs[2]), col = cols[2])
  }
  if(varstoplot[i] %in% rownames(coefs3)){
    x = coefs3[rownames(coefs3) == varstoplot[i], 1]
    se = coefs3[rownames(coefs3) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[3], pch = pchs[3], col = cols[3])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[3], length(varstoplot) + 1 - i + offs[3]), col = cols[3])
  }
}
legend('topleft', col = cols, pch = 16, lwd = 1, legend = c('Jtu', 'Jbeta', 'Horn'), cex = 0.5)

Plot the main effects

Plot interactions (Jaccard turnover)

Plot residuals against each predictor (Jaccard turnover)

resids <- resid(modTfull1)
preds <- getData(modTfull1)
col = '#00000033'
cex = 0.5
par(mfrow = c(5,4))
boxplot(resids ~ preds$REALM, cex = cex, col = col)
plot(preds$temptrend_abs.sc, resids, cex = cex, col = col)
plot(preds$tsign, resids, cex = cex, col = col)
plot(preds$tempave.sc, resids, cex = cex, col = col)
plot(preds$tempave_metab.sc, resids, cex = cex, col = col)
plot(preds$seas.sc, resids, cex = cex, col = col)
plot(preds$microclim.sc, resids, cex = cex, col = col)
plot(preds$mass.sc, resids, cex = cex, col = col)
plot(preds$speed.sc, resids, cex = cex, col = col)
plot(preds$lifespan.sc, resids, cex = cex, col = col)
plot(preds$consumerfrac.sc, resids, cex = cex, col = col)
plot(preds$endothermfrac.sc, resids, cex = cex, col = col)
plot(preds$nspp.sc, resids, cex = cex, col = col)
plot(preds$thermal_bias.sc, resids, cex = cex, col = col)
plot(preds$npp.sc, resids, cex = cex, col = col)
plot(preds$veg.sc, resids, cex = cex, col = col)
plot(preds$human_bowler.sc, resids, cex = cex, col = col)

Remove each term from the full model

Plot deltaAICs for all 3 models

# transform for a plot
aicsfromfulllong <- reshape(aicsfromfull, direction = 'long',
                            varying = c('dAIC_Jtu', 'dAIC_Jbeta', 'dAIC_Horn'),
                            v.names = 'dAIC',
                            idvar = 'mod',
                            timevar = 'type',
                            times = c('Jtu', 'Jbeta', 'Horn'))

trans = function(x) sign(x)*sqrt(abs(x))
aicsfromfulllong$dAIC_tr <- trans(aicsfromfulllong$dAIC)

# plot
xlims <- range(aicsfromfulllong$dAIC_tr, na.rm = TRUE)
xticks <- c(-10, 0, 10, 100, 1000, 10000)
par(mai = c(0.5, 3, 0.1, 0.1))
with(aicsfromfulllong[aicsfromfulllong$type == 'Jtu',], plot(dAIC_tr, nrow(aicsfromfull):1, 
                                                           col = 'light grey', xlim = xlims, yaxt = 'n', ylab = '', xaxt = 'n'))
with(aicsfromfulllong[aicsfromfulllong$type == 'Jbeta',], points(dAIC_tr, nrow(aicsfromfull):1 - 0.1, col = 'dark grey'))
with(aicsfromfulllong[aicsfromfulllong$type == 'Horn',], points(dAIC_tr, nrow(aicsfromfull):1 - 0.2, col = 'black'))
axis(2, at = nrow(aicsfromfull):1, labels = aicsfromfull$mod, las = 1, cex.axis = 0.7)
axis(1, at = trans(xticks), labels = xticks, cex.axis = 0.5)
abline(v = 0, lty =2, col = 'grey')

Light grey is for Jaccard turnover, dark grey is for Jaccard total, black is for Morisita-Horn. Clear that removing temperature trend makes the model quite a bit worse and has the biggest effect.

Simplify the full models

This takes a couple days on a laptop to run if temp/ files not available.

i1 <- trends[, complete.cases(Jtutrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc)]
i2 <- trends[, complete.cases(Jbetatrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc)]
i3 <- trends[, complete.cases(Horntrendrem0, REALM, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend_abs.sc, mass.sc, speed.sc, 
                             consumerfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, duration.sc, human_bowler.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

# simplify the full models
if(file.exists('temp/modTsimpJturem0.rds')){
  modTsimpJturem0 <- readRDS('temp/modTsimpJturem0.rds')
} else {
  modTfullJturem0ML <- lme(Jtutrendrem0 ~ temptrend_abs.sc*REALM + 
                         temptrend_abs.sc*tsign +
                         temptrend_abs.sc*tempave_metab.sc + 
                         temptrend_abs.sc*seas.sc + 
                         temptrend_abs.sc*microclim.sc + 
                         temptrend_abs.sc*mass.sc + 
                         temptrend_abs.sc*speed.sc + 
                         temptrend_abs.sc*consumerfrac.sc +
                         temptrend_abs.sc*nspp.sc +
                         temptrend_abs.sc*thermal_bias.sc:tsign +
                         temptrend_abs.sc*npp.sc +
                         temptrend_abs.sc*veg.sc +
                         temptrend_abs.sc*duration.sc +
                         temptrend_abs.sc*human_bowler.sc:REALM2,
                       random = randef, weights = varef, data = trends[i1,], method = 'ML',
                       control = lmeControl(maxIter = 100, msMaxIter = 100, niterEM = 50, msMaxEval = 500))
  modTsimpJturem0 <- stepAIC(modTfullJturem0ML, direction = 'backward')
  saveRDS(modTsimpJturem0, file = 'temp/modTsimpJturem0.rds')
}

if(file.exists('temp/modTsimpJbetarem0.rds')){
  modTsimpJbetarem0 <- readRDS('temp/modTsimpJbetarem0.rds')
} else {
  modTfullJbetarem0ML <- lme(Jbetatrendrem0 ~ temptrend_abs.sc*REALM + 
                         temptrend_abs.sc*tsign +
                         temptrend_abs.sc*tempave_metab.sc + 
                         temptrend_abs.sc*seas.sc + 
                         temptrend_abs.sc*microclim.sc + 
                         temptrend_abs.sc*mass.sc + 
                         temptrend_abs.sc*speed.sc + 
                         temptrend_abs.sc*consumerfrac.sc +
                         temptrend_abs.sc*nspp.sc +
                         temptrend_abs.sc*thermal_bias.sc:tsign +
                         temptrend_abs.sc*npp.sc +
                         temptrend_abs.sc*veg.sc +
                         temptrend_abs.sc*duration.sc +
                         temptrend_abs.sc*human_bowler.sc:REALM2,
                       random = randef, weights = varef, data = trends[i2,], method = 'ML')
  modTsimpJbetarem0 <- stepAIC(modTfullJbetarem0ML, direction = 'backward')
  saveRDS(modTsimpJbetarem0, file = 'temp/modTsimpJbetarem0.rds')
}

if(file.exists('temp/modTsimpHornrem0.rds')){
  modTsimpHornrem0 <- readRDS('temp/modTsimpHornrem0.rds')
} else {
  modTfullHornrem0ML <- lme(Horntrendrem0 ~ temptrend_abs.sc*REALM + 
                        temptrend_abs.sc*tsign +
                        temptrend_abs.sc*tempave_metab.sc + 
                        temptrend_abs.sc*seas.sc + 
                        temptrend_abs.sc*microclim.sc + 
                        temptrend_abs.sc*mass.sc + 
                        temptrend_abs.sc*speed.sc + 
                        temptrend_abs.sc*consumerfrac.sc +
                        temptrend_abs.sc*nspp.sc +
                        temptrend_abs.sc*thermal_bias.sc:tsign +
                        temptrend_abs.sc*npp.sc +
                        temptrend_abs.sc*veg.sc +
                        temptrend_abs.sc*duration.sc +
                        temptrend_abs.sc*human_bowler.sc:REALM2,
                      random = randef, weights = varef, data = trends[i3,], method = 'ML')
  modTsimpHornrem0 <- stepAIC(modTfullHornrem0ML, direction = 'backward')
  saveRDS(modTsimpHornrem0, file = 'temp/modTsimpHornrem0.rds')
}

summary(modTsimpJturem0)
Linear mixed-effects model fit by maximum likelihood
 Data: trends[i1, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.009359204 (Intr)
temptrend_abs.sc 0.024191157 -0.98 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01090463 2.006731

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.129313 
Fixed effects: Jtutrendrem0 ~ temptrend_abs.sc + tsign + tempave_metab.sc +      seas.sc + microclim.sc + mass.sc + speed.sc + consumerfrac.sc +      npp.sc + veg.sc + duration.sc + temptrend_abs.sc:tsign +      temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:microclim.sc +      temptrend_abs.sc:consumerfrac.sc + tsign:thermal_bias.sc +      temptrend_abs.sc:npp.sc + human_bowler.sc:REALM2 + temptrend_abs.sc:tsign:thermal_bias.sc +      temptrend_abs.sc:human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. tsign1 tmpv_. ses.sc mcrcl. mss.sc spd.sc cnsmr.
temptrend_abs.sc                                 -0.860                                                        
tsign1                                           -0.318  0.167                                                 
tempave_metab.sc                                 -0.095  0.079  0.081                                          
seas.sc                                           0.099 -0.049 -0.051  0.071                                   
microclim.sc                                     -0.054  0.062  0.028 -0.203  0.032                            
mass.sc                                          -0.012  0.059 -0.021  0.072  0.147  0.013                     
speed.sc                                          0.096 -0.056 -0.036 -0.113 -0.045  0.075 -0.560              
consumerfrac.sc                                   0.085 -0.084  0.000 -0.096 -0.041  0.047  0.040 -0.123       
npp.sc                                           -0.134  0.131  0.059  0.050 -0.053 -0.222 -0.045  0.130 -0.023
veg.sc                                           -0.134  0.076 -0.031 -0.074 -0.424 -0.074  0.120 -0.043  0.052
duration.sc                                      -0.174  0.145 -0.163  0.103 -0.095 -0.049 -0.010 -0.025  0.019
temptrend_abs.sc:tsign1                           0.157 -0.361 -0.516 -0.057 -0.024 -0.009 -0.009  0.017 -0.001
temptrend_abs.sc:tempave_metab.sc                 0.074 -0.076 -0.047 -0.820 -0.072  0.148  0.070 -0.182  0.112
temptrend_abs.sc:microclim.sc                     0.057 -0.056 -0.024  0.131 -0.003 -0.763  0.006 -0.048 -0.023
temptrend_abs.sc:consumerfrac.sc                 -0.089  0.092  0.011  0.072 -0.006 -0.023 -0.073  0.061 -0.783
tsign-1:thermal_bias.sc                           0.010  0.041 -0.089  0.133 -0.155 -0.005 -0.025  0.006  0.006
tsign1:thermal_bias.sc                           -0.052  0.030  0.055  0.228 -0.272 -0.089 -0.041  0.006 -0.013
temptrend_abs.sc:npp.sc                           0.125 -0.173 -0.037 -0.017 -0.008  0.191  0.032 -0.048 -0.014
human_bowler.sc:REALM2TerrFresh                  -0.029  0.031  0.021 -0.007 -0.092  0.090  0.046 -0.042 -0.031
human_bowler.sc:REALM2Marine                      0.009 -0.004 -0.014  0.092 -0.124  0.030 -0.016  0.032 -0.069
temptrend_abs.sc:tsign-1:thermal_bias.sc          0.058 -0.129 -0.059 -0.154  0.016  0.043  0.025 -0.044  0.009
temptrend_abs.sc:tsign1:thermal_bias.sc           0.010 -0.006  0.017 -0.234  0.003  0.065  0.034 -0.116  0.010
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.018 -0.031 -0.010 -0.025 -0.006 -0.042  0.005 -0.016  0.023
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.003  0.009  0.002 -0.090 -0.003 -0.016  0.031 -0.040  0.128
                                                 npp.sc veg.sc drtn.s tm_.:1 tm_.:_. tmptrnd_bs.sc:m.
temptrend_abs.sc                                                                                     
tsign1                                                                                               
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
consumerfrac.sc                                                                                      
npp.sc                                                                                               
veg.sc                                           -0.064                                              
duration.sc                                       0.023 -0.034                                       
temptrend_abs.sc:tsign1                          -0.050  0.004 -0.049                                
temptrend_abs.sc:tempave_metab.sc                -0.049 -0.110 -0.013  0.046                         
temptrend_abs.sc:microclim.sc                     0.210 -0.025  0.056  0.024 -0.112                  
temptrend_abs.sc:consumerfrac.sc                  0.001 -0.014 -0.041  0.034 -0.121   0.003          
tsign-1:thermal_bias.sc                          -0.025  0.035  0.076 -0.044 -0.116   0.002          
tsign1:thermal_bias.sc                           -0.091  0.079  0.047 -0.003 -0.221   0.045          
temptrend_abs.sc:npp.sc                          -0.743 -0.004 -0.038  0.018  0.070  -0.316          
human_bowler.sc:REALM2TerrFresh                  -0.059  0.009 -0.024 -0.015 -0.009   0.005          
human_bowler.sc:REALM2Marine                     -0.231  0.062  0.019  0.006 -0.080  -0.027          
temptrend_abs.sc:tsign-1:thermal_bias.sc          0.010 -0.057 -0.048  0.241  0.178  -0.083          
temptrend_abs.sc:tsign1:thermal_bias.sc           0.083 -0.064 -0.032 -0.026  0.304  -0.179          
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.017  0.003  0.014  0.024  0.031   0.036          
temptrend_abs.sc:human_bowler.sc:REALM2Marine     0.180  0.022 -0.020 -0.025  0.126  -0.020          
                                                 tmptrnd_bs.sc:c. t-1:_. ts1:_. tmptrnd_bs.sc:n. h_.:REALM2T
temptrend_abs.sc                                                                                            
tsign1                                                                                                      
tempave_metab.sc                                                                                            
seas.sc                                                                                                     
microclim.sc                                                                                                
mass.sc                                                                                                     
speed.sc                                                                                                    
consumerfrac.sc                                                                                             
npp.sc                                                                                                      
veg.sc                                                                                                      
duration.sc                                                                                                 
temptrend_abs.sc:tsign1                                                                                     
temptrend_abs.sc:tempave_metab.sc                                                                           
temptrend_abs.sc:microclim.sc                                                                               
temptrend_abs.sc:consumerfrac.sc                                                                            
tsign-1:thermal_bias.sc                          -0.002                                                     
tsign1:thermal_bias.sc                            0.021            0.323                                    
temptrend_abs.sc:npp.sc                          -0.002            0.024  0.081                             
human_bowler.sc:REALM2TerrFresh                   0.019            0.074  0.118 -0.018                      
human_bowler.sc:REALM2Marine                      0.069            0.085  0.112  0.176            0.033     
temptrend_abs.sc:tsign-1:thermal_bias.sc          0.005           -0.488 -0.281  0.006           -0.085     
temptrend_abs.sc:tsign1:thermal_bias.sc           0.003           -0.242 -0.714 -0.061           -0.091     
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh -0.020           -0.071 -0.086 -0.013           -0.630     
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.139           -0.046 -0.080 -0.231           -0.014     
                                                 h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                         
tsign1                                                                                   
tempave_metab.sc                                                                         
seas.sc                                                                                  
microclim.sc                                                                             
mass.sc                                                                                  
speed.sc                                                                                 
consumerfrac.sc                                                                          
npp.sc                                                                                   
veg.sc                                                                                   
duration.sc                                                                              
temptrend_abs.sc:tsign1                                                                  
temptrend_abs.sc:tempave_metab.sc                                                        
temptrend_abs.sc:microclim.sc                                                            
temptrend_abs.sc:consumerfrac.sc                                                         
tsign-1:thermal_bias.sc                                                                  
tsign1:thermal_bias.sc                                                                   
temptrend_abs.sc:npp.sc                                                                  
human_bowler.sc:REALM2TerrFresh                                                          
human_bowler.sc:REALM2Marine                                                             
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.053                                  
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.085       0.369                      
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh -0.014       0.137  0.106               
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.771       0.044  0.085  0.011        

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-6.63842790 -0.23658104 -0.02245775  0.26774537  5.41648169 

Number of Observations: 36017
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   231                  36017 
summary(modTsimpJbetarem0)
Linear mixed-effects model fit by maximum likelihood
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.006875615 (Intr)
temptrend_abs.sc 0.016512162 -0.015

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev:  0.00367393 0.9559692

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.889706 
Fixed effects: Jbetatrendrem0 ~ temptrend_abs.sc + REALM + tsign + tempave_metab.sc +      microclim.sc + mass.sc + consumerfrac.sc + nspp.sc + npp.sc +      veg.sc + duration.sc + temptrend_abs.sc:REALM + temptrend_abs.sc:tsign +      temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:microclim.sc +      temptrend_abs.sc:consumerfrac.sc + temptrend_abs.sc:nspp.sc +      tsign:thermal_bias.sc + temptrend_abs.sc:npp.sc + temptrend_abs.sc:veg.sc +      human_bowler.sc:REALM2 + temptrend_abs.sc:tsign:thermal_bias.sc +      temptrend_abs.sc:human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv_. mcrcl. mss.sc cnsmr.
temptrend_abs.sc                                 -0.565                                                        
REALMMarine                                      -0.949  0.549                                                 
REALMTerrestrial                                 -0.765  0.391  0.722                                          
tsign1                                           -0.088  0.041  0.013 -0.012                                   
tempave_metab.sc                                  0.123 -0.049 -0.106 -0.257  0.095                            
microclim.sc                                     -0.066  0.050  0.071  0.039  0.013 -0.195                     
mass.sc                                           0.168  0.015 -0.118 -0.096 -0.025  0.032  0.041              
consumerfrac.sc                                  -0.006  0.009  0.009  0.088 -0.036 -0.118  0.028 -0.001       
nspp.sc                                          -0.013 -0.021 -0.045 -0.016  0.062 -0.188 -0.145  0.026  0.129
npp.sc                                           -0.001  0.014 -0.022  0.038  0.080  0.104 -0.138  0.047 -0.039
veg.sc                                           -0.449  0.370  0.471  0.019 -0.011 -0.014 -0.013 -0.004 -0.017
duration.sc                                      -0.048  0.019  0.020 -0.026 -0.150  0.160 -0.034 -0.025  0.008
temptrend_abs.sc:REALMMarine                      0.551 -0.958 -0.566 -0.372 -0.012  0.041 -0.052  0.008 -0.009
temptrend_abs.sc:REALMTerrestrial                 0.385 -0.774 -0.366 -0.531  0.018  0.151  0.002  0.001 -0.062
temptrend_abs.sc:tsign1                           0.053 -0.126 -0.024  0.002 -0.440 -0.049 -0.010  0.017  0.007
temptrend_abs.sc:tempave_metab.sc                -0.035  0.101  0.029  0.158 -0.101 -0.521  0.030 -0.007  0.109
temptrend_abs.sc:microclim.sc                     0.048 -0.064 -0.052 -0.018 -0.017  0.124 -0.781 -0.027 -0.014
temptrend_abs.sc:consumerfrac.sc                 -0.002 -0.020 -0.001 -0.057  0.031  0.090  0.005 -0.035 -0.715
temptrend_abs.sc:nspp.sc                         -0.007  0.009  0.026  0.020 -0.031  0.112  0.073 -0.020 -0.070
tsign-1:thermal_bias.sc                           0.033 -0.005 -0.020 -0.066 -0.088  0.157  0.011  0.000  0.000
tsign1:thermal_bias.sc                            0.067 -0.023 -0.052 -0.144  0.041  0.318 -0.089  0.063 -0.049
temptrend_abs.sc:npp.sc                           0.014  0.023  0.005 -0.044 -0.050 -0.043  0.148 -0.006  0.009
temptrend_abs.sc:veg.sc                           0.358 -0.449 -0.374  0.005 -0.008 -0.005  0.006  0.003  0.009
human_bowler.sc:REALM2TerrFresh                  -0.107  0.124  0.114 -0.027  0.016  0.003  0.116  0.011 -0.039
human_bowler.sc:REALM2Marine                      0.023 -0.010 -0.013 -0.055 -0.019  0.134  0.051  0.035 -0.087
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.013  0.012  0.012  0.071 -0.069 -0.103  0.002 -0.016  0.013
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.021  0.053  0.013  0.099 -0.006 -0.161  0.018 -0.045  0.025
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.145 -0.206 -0.155  0.024 -0.015 -0.017 -0.068 -0.010  0.025
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.015  0.016  0.009  0.048  0.006 -0.101 -0.024 -0.016  0.134
                                                 nspp.s npp.sc veg.sc drtn.s t_.:REALMM t_.:REALMT tm_.:1 tm_.:_.
temptrend_abs.sc                                                                                                 
REALMMarine                                                                                                      
REALMTerrestrial                                                                                                 
tsign1                                                                                                           
tempave_metab.sc                                                                                                 
microclim.sc                                                                                                     
mass.sc                                                                                                          
consumerfrac.sc                                                                                                  
nspp.sc                                                                                                          
npp.sc                                           -0.245                                                          
veg.sc                                            0.029 -0.197                                                   
duration.sc                                      -0.141  0.074 -0.011                                            
temptrend_abs.sc:REALMMarine                      0.043  0.020 -0.389  0.019                                     
temptrend_abs.sc:REALMTerrestrial                 0.034 -0.053  0.008  0.025  0.730                              
temptrend_abs.sc:tsign1                          -0.003 -0.068 -0.025 -0.037  0.047      0.004                   
temptrend_abs.sc:tempave_metab.sc                 0.081 -0.046  0.000 -0.051 -0.072     -0.281      0.044        
temptrend_abs.sc:microclim.sc                     0.084  0.162  0.003  0.028  0.070     -0.029      0.015  0.028 
temptrend_abs.sc:consumerfrac.sc                 -0.100  0.017  0.003 -0.008  0.021      0.086      0.015 -0.152 
temptrend_abs.sc:nspp.sc                         -0.592  0.133 -0.031 -0.010 -0.058     -0.050     -0.016 -0.083 
tsign-1:thermal_bias.sc                          -0.053 -0.019  0.005  0.077  0.011      0.048     -0.053 -0.072 
tsign1:thermal_bias.sc                           -0.085 -0.088  0.030  0.075  0.014      0.107      0.005 -0.198 
temptrend_abs.sc:npp.sc                           0.144 -0.737  0.153 -0.069 -0.063      0.061      0.029  0.076 
temptrend_abs.sc:veg.sc                          -0.035  0.174 -0.815  0.021  0.474     -0.006      0.051 -0.023 
human_bowler.sc:REALM2TerrFresh                   0.005 -0.130  0.256 -0.029 -0.134      0.023     -0.024 -0.008 
human_bowler.sc:REALM2Marine                     -0.045 -0.235  0.049  0.024  0.005      0.042      0.008 -0.087 
temptrend_abs.sc:tsign-1:thermal_bias.sc          0.003  0.012 -0.005 -0.064 -0.026     -0.112      0.274  0.225 
temptrend_abs.sc:tsign1:thermal_bias.sc           0.037  0.090 -0.047 -0.058 -0.031     -0.166     -0.018  0.374 
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.006  0.100 -0.354  0.025  0.220     -0.026      0.044  0.037 
temptrend_abs.sc:human_bowler.sc:REALM2Marine     0.037  0.181 -0.040 -0.014 -0.008     -0.054     -0.015  0.126 
                                                 tmptrnd_bs.sc:m. tmptrnd_bs.sc:c. tmptrnd_bs.sc:ns. t-1:_.
temptrend_abs.sc                                                                                           
REALMMarine                                                                                                
REALMTerrestrial                                                                                           
tsign1                                                                                                     
tempave_metab.sc                                                                                           
microclim.sc                                                                                               
mass.sc                                                                                                    
consumerfrac.sc                                                                                            
nspp.sc                                                                                                    
npp.sc                                                                                                     
veg.sc                                                                                                     
duration.sc                                                                                                
temptrend_abs.sc:REALMMarine                                                                               
temptrend_abs.sc:REALMTerrestrial                                                                          
temptrend_abs.sc:tsign1                                                                                    
temptrend_abs.sc:tempave_metab.sc                                                                          
temptrend_abs.sc:microclim.sc                                                                              
temptrend_abs.sc:consumerfrac.sc                 -0.021                                                    
temptrend_abs.sc:nspp.sc                         -0.048            0.133                                   
tsign-1:thermal_bias.sc                          -0.009           -0.002            0.013                  
tsign1:thermal_bias.sc                            0.037            0.031            0.004             0.258
temptrend_abs.sc:npp.sc                          -0.283           -0.025           -0.143             0.018
temptrend_abs.sc:veg.sc                           0.035           -0.004            0.018            -0.006
human_bowler.sc:REALM2TerrFresh                  -0.031            0.022            0.025             0.054
human_bowler.sc:REALM2Marine                     -0.040            0.084            0.056             0.072
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.029           -0.010            0.014            -0.414
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.096           -0.027           -0.033            -0.186
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.091           -0.026           -0.019            -0.054
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.020           -0.137           -0.063            -0.048
                                                 ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v. h_.:REALM2T
temptrend_abs.sc                                                                                      
REALMMarine                                                                                           
REALMTerrestrial                                                                                      
tsign1                                                                                                
tempave_metab.sc                                                                                      
microclim.sc                                                                                          
mass.sc                                                                                               
consumerfrac.sc                                                                                       
nspp.sc                                                                                               
npp.sc                                                                                                
veg.sc                                                                                                
duration.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                          
temptrend_abs.sc:REALMTerrestrial                                                                     
temptrend_abs.sc:tsign1                                                                               
temptrend_abs.sc:tempave_metab.sc                                                                     
temptrend_abs.sc:microclim.sc                                                                         
temptrend_abs.sc:consumerfrac.sc                                                                      
temptrend_abs.sc:nspp.sc                                                                              
tsign-1:thermal_bias.sc                                                                               
tsign1:thermal_bias.sc                                                                                
temptrend_abs.sc:npp.sc                           0.094                                               
temptrend_abs.sc:veg.sc                          -0.055 -0.264                                        
human_bowler.sc:REALM2TerrFresh                   0.129  0.059            -0.302                      
human_bowler.sc:REALM2Marine                      0.069  0.177            -0.044            0.045     
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.258 -0.009            -0.001           -0.092     
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.712 -0.085             0.049           -0.104     
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh -0.109 -0.143             0.463           -0.752     
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.066 -0.214             0.059           -0.040     
                                                 h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                         
REALMMarine                                                                              
REALMTerrestrial                                                                         
tsign1                                                                                   
tempave_metab.sc                                                                         
microclim.sc                                                                             
mass.sc                                                                                  
consumerfrac.sc                                                                          
nspp.sc                                                                                  
npp.sc                                                                                   
veg.sc                                                                                   
duration.sc                                                                              
temptrend_abs.sc:REALMMarine                                                             
temptrend_abs.sc:REALMTerrestrial                                                        
temptrend_abs.sc:tsign1                                                                  
temptrend_abs.sc:tempave_metab.sc                                                        
temptrend_abs.sc:microclim.sc                                                            
temptrend_abs.sc:consumerfrac.sc                                                         
temptrend_abs.sc:nspp.sc                                                                 
tsign-1:thermal_bias.sc                                                                  
tsign1:thermal_bias.sc                                                                   
temptrend_abs.sc:npp.sc                                                                  
temptrend_abs.sc:veg.sc                                                                  
human_bowler.sc:REALM2TerrFresh                                                          
human_bowler.sc:REALM2Marine                                                             
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.044                                  
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.070       0.384                      
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh -0.036       0.124  0.123               
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.759       0.041  0.074  0.037        

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.39440359 -0.32029428 -0.03087913  0.31695654  8.33262939 

Number of Observations: 36017
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   231                  36017 
summary(modTsimpHornrem0)
Linear mixed-effects model fit by maximum likelihood
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.01429668 (Intr)
temptrend_abs.sc 0.02508293 0.046 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01877495  2.44238

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.326836 
Fixed effects: Horntrendrem0 ~ temptrend_abs.sc + REALM + tsign + tempave_metab.sc +      seas.sc + mass.sc + speed.sc + consumerfrac.sc + nspp.sc +      npp.sc + veg.sc + duration.sc + temptrend_abs.sc:REALM +      temptrend_abs.sc:tsign + temptrend_abs.sc:consumerfrac.sc +      tsign:thermal_bias.sc + temptrend_abs.sc:npp.sc + temptrend_abs.sc:veg.sc +      human_bowler.sc:REALM2 + temptrend_abs.sc:tsign:thermal_bias.sc +      temptrend_abs.sc:human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv_. ses.sc mss.sc spd.sc
temptrend_abs.sc                                 -0.472                                                        
REALMMarine                                      -0.957  0.456                                                 
REALMTerrestrial                                 -0.747  0.335  0.698                                          
tsign1                                           -0.069  0.049  0.003  0.012                                   
tempave_metab.sc                                  0.100 -0.003 -0.081 -0.205  0.009                            
seas.sc                                          -0.085 -0.012  0.130 -0.038 -0.076  0.083                     
mass.sc                                           0.078  0.006 -0.054 -0.043  0.002  0.081  0.078              
speed.sc                                          0.073  0.004 -0.027 -0.054 -0.057 -0.058  0.024 -0.428       
consumerfrac.sc                                  -0.013  0.009  0.009  0.072  0.031 -0.087 -0.058  0.004 -0.063
nspp.sc                                          -0.011 -0.025 -0.031 -0.030  0.054 -0.155  0.037 -0.065  0.132
npp.sc                                            0.000  0.037 -0.013  0.067  0.014 -0.041 -0.137 -0.046  0.136
veg.sc                                           -0.539  0.287  0.557  0.044 -0.007 -0.003  0.035  0.006 -0.016
duration.sc                                      -0.027  0.038  0.016  0.010 -0.157  0.127 -0.080  0.002 -0.005
temptrend_abs.sc:REALMMarine                      0.460 -0.958 -0.466 -0.319 -0.023  0.014  0.019  0.008  0.004
temptrend_abs.sc:REALMTerrestrial                 0.319 -0.781 -0.301 -0.438 -0.009  0.020 -0.017 -0.009  0.010
temptrend_abs.sc:tsign1                           0.043 -0.116 -0.014  0.000 -0.488 -0.021 -0.015  0.005  0.022
temptrend_abs.sc:consumerfrac.sc                  0.008 -0.018 -0.012 -0.034 -0.011  0.028  0.003 -0.027  0.019
tsign-1:thermal_bias.sc                           0.049 -0.002 -0.044 -0.067 -0.099  0.201 -0.173 -0.037 -0.004
tsign1:thermal_bias.sc                            0.083 -0.006 -0.086 -0.114  0.060  0.324 -0.303  0.000 -0.031
temptrend_abs.sc:npp.sc                           0.033 -0.026 -0.028 -0.057 -0.004  0.060 -0.044  0.024 -0.065
temptrend_abs.sc:veg.sc                           0.317 -0.445 -0.326  0.003 -0.022 -0.013  0.009 -0.003  0.010
human_bowler.sc:REALM2TerrFresh                  -0.056  0.056  0.057 -0.026  0.018  0.034 -0.048  0.031 -0.033
human_bowler.sc:REALM2Marine                      0.032 -0.007 -0.036 -0.037 -0.015  0.092 -0.127 -0.010  0.017
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.007 -0.013  0.008  0.036 -0.038  0.016  0.042  0.007 -0.007
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.017  0.009  0.015  0.042  0.023  0.040  0.075  0.003 -0.022
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.116 -0.209 -0.121  0.017 -0.016 -0.005  0.027 -0.009  0.003
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.019  0.009  0.024  0.029  0.007 -0.039  0.047  0.011 -0.016
                                                 cnsmr. nspp.s npp.sc veg.sc drtn.s t_.:REALMM t_.:REALMT tm_.:1
temptrend_abs.sc                                                                                                
REALMMarine                                                                                                     
REALMTerrestrial                                                                                                
tsign1                                                                                                          
tempave_metab.sc                                                                                                
seas.sc                                                                                                         
mass.sc                                                                                                         
speed.sc                                                                                                        
consumerfrac.sc                                                                                                 
nspp.sc                                           0.089                                                         
npp.sc                                           -0.018 -0.203                                                  
veg.sc                                            0.002  0.011 -0.159                                           
duration.sc                                       0.016 -0.201  0.039 -0.005                                    
temptrend_abs.sc:REALMMarine                     -0.017  0.016 -0.006 -0.301 -0.001                             
temptrend_abs.sc:REALMTerrestrial                -0.025  0.025 -0.054  0.008 -0.004  0.738                      
temptrend_abs.sc:tsign1                          -0.013 -0.016 -0.038 -0.011 -0.007  0.043      0.012           
temptrend_abs.sc:consumerfrac.sc                 -0.712 -0.017 -0.010 -0.009 -0.008  0.029      0.040      0.038
tsign-1:thermal_bias.sc                          -0.003 -0.047 -0.017  0.007  0.071  0.006      0.040     -0.025
tsign1:thermal_bias.sc                           -0.008 -0.073 -0.113  0.008  0.056  0.001      0.057      0.010
temptrend_abs.sc:npp.sc                          -0.017  0.064 -0.650  0.098 -0.017 -0.015      0.076      0.001
temptrend_abs.sc:veg.sc                          -0.003 -0.016  0.148 -0.616  0.006  0.467     -0.024      0.061
human_bowler.sc:REALM2TerrFresh                  -0.029  0.018 -0.082  0.138 -0.009 -0.062      0.035     -0.013
human_bowler.sc:REALM2Marine                     -0.054 -0.025 -0.230  0.036  0.034  0.013      0.025      0.013
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.014  0.000  0.009 -0.009 -0.033 -0.003     -0.060      0.262
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.028 -0.012  0.100 -0.027 -0.028  0.002     -0.078     -0.029
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.004 -0.009  0.071 -0.262  0.017  0.220     -0.031      0.049
temptrend_abs.sc:human_bowler.sc:REALM2Marine     0.127  0.002  0.174 -0.024 -0.014 -0.015     -0.028     -0.009
                                                 tmptrnd_bs.sc:c. t-1:_. ts1:_. tmptrnd_bs.sc:n. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                                 
REALMMarine                                                                                                      
REALMTerrestrial                                                                                                 
tsign1                                                                                                           
tempave_metab.sc                                                                                                 
seas.sc                                                                                                          
mass.sc                                                                                                          
speed.sc                                                                                                         
consumerfrac.sc                                                                                                  
nspp.sc                                                                                                          
npp.sc                                                                                                           
veg.sc                                                                                                           
duration.sc                                                                                                      
temptrend_abs.sc:REALMMarine                                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                                
temptrend_abs.sc:tsign1                                                                                          
temptrend_abs.sc:consumerfrac.sc                                                                                 
tsign-1:thermal_bias.sc                           0.003                                                          
tsign1:thermal_bias.sc                            0.013            0.370                                         
temptrend_abs.sc:npp.sc                           0.014            0.018  0.095                                  
temptrend_abs.sc:veg.sc                           0.007           -0.007 -0.039 -0.231                           
human_bowler.sc:REALM2TerrFresh                   0.011            0.057  0.115  0.043           -0.194          
human_bowler.sc:REALM2Marine                      0.068            0.113  0.140  0.174           -0.041          
temptrend_abs.sc:tsign-1:thermal_bias.sc          0.026           -0.452 -0.220 -0.033            0.018          
temptrend_abs.sc:tsign1:thermal_bias.sc           0.034           -0.210 -0.614 -0.159            0.067          
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh  0.002           -0.063 -0.091 -0.112            0.492          
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.147           -0.062 -0.094 -0.265            0.060          
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave_metab.sc                                                                                     
seas.sc                                                                                              
mass.sc                                                                                              
speed.sc                                                                                             
consumerfrac.sc                                                                                      
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
duration.sc                                                                                          
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:consumerfrac.sc                                                                     
tsign-1:thermal_bias.sc                                                                              
tsign1:thermal_bias.sc                                                                               
temptrend_abs.sc:npp.sc                                                                              
temptrend_abs.sc:veg.sc                                                                              
human_bowler.sc:REALM2TerrFresh                                                                      
human_bowler.sc:REALM2Marine                      0.035                                              
temptrend_abs.sc:tsign-1:thermal_bias.sc         -0.057      -0.046                                  
temptrend_abs.sc:tsign1:thermal_bias.sc          -0.062      -0.085       0.361                      
temptrend_abs.sc:human_bowler.sc:REALM2TerrFresh -0.537      -0.031       0.142  0.132               
temptrend_abs.sc:human_bowler.sc:REALM2Marine    -0.021      -0.728       0.021  0.052  0.033        

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.66375573 -0.23464298 -0.02584232  0.23186565  5.76940752 

Number of Observations: 35327
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   200                  35327 

Make realm-specific models

summary(modTfullHornTerr)
Linear mixed-effects model fit by REML
 Data: trends[i1, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.009555472 (Intr)
temptrend_abs.sc 0.022365121 0.313 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev: 0.004029061 1.695873

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.036154 
Fixed effects: Horntrendrem0 ~ temptrend_abs.sc * tsign + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * consumerfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * duration.sc +      temptrend_abs.sc * human_bowler.sc 
 Correlation: 
                                         (Intr) tmpt_. tsign1 tmpv_. ses.sc mcrcl. mss.sc spd.sc cnsmr.
temptrend_abs.sc                         -0.629                                                        
tsign1                                   -0.215  0.019                                                 
tempave_metab.sc                         -0.486  0.307 -0.209                                          
seas.sc                                  -0.258  0.267 -0.078  0.049                                   
microclim.sc                             -0.182  0.232  0.094 -0.018  0.473                            
mass.sc                                   0.515 -0.246 -0.010 -0.141  0.008  0.039                     
speed.sc                                  0.102  0.048 -0.033 -0.595 -0.025 -0.031 -0.141              
consumerfrac.sc                           0.356 -0.340  0.181  0.004 -0.048  0.072  0.424 -0.654       
nspp.sc                                  -0.064  0.025 -0.016 -0.061 -0.118 -0.161 -0.012  0.032  0.000
npp.sc                                   -0.044  0.007  0.118 -0.045  0.204  0.149  0.011  0.013 -0.007
veg.sc                                   -0.213  0.262 -0.078 -0.082 -0.069 -0.106  0.001  0.198 -0.160
duration.sc                              -0.098  0.042 -0.186  0.067  0.069 -0.016 -0.013 -0.051  0.138
human_bowler.sc                          -0.229  0.250  0.042  0.057 -0.059  0.150 -0.120  0.007 -0.147
temptrend_abs.sc:tsign1                   0.169 -0.306 -0.490  0.093 -0.109 -0.195  0.015  0.050 -0.111
temptrend_abs.sc:tempave_metab.sc         0.296 -0.503  0.138 -0.662 -0.039 -0.003  0.002  0.427 -0.032
temptrend_abs.sc:seas.sc                  0.219 -0.380  0.028 -0.025 -0.748 -0.378 -0.012  0.008  0.045
temptrend_abs.sc:microclim.sc             0.174 -0.290 -0.097  0.007 -0.367 -0.845 -0.034  0.038 -0.071
temptrend_abs.sc:mass.sc                 -0.313  0.361  0.005 -0.015 -0.041 -0.038 -0.642  0.280 -0.433
temptrend_abs.sc:speed.sc                 0.039  0.012  0.007  0.427  0.048  0.058  0.213 -0.732  0.560
temptrend_abs.sc:consumerfrac.sc         -0.283  0.407 -0.096 -0.047 -0.009 -0.066 -0.336  0.552 -0.784
temptrend_abs.sc:nspp.sc                  0.025 -0.086  0.006  0.050  0.053  0.060 -0.005  0.003 -0.014
tsign-1:thermal_bias.sc                  -0.091 -0.062  0.667 -0.179 -0.286 -0.090  0.013 -0.024  0.140
tsign1:thermal_bias.sc                    0.212 -0.208 -0.065 -0.033 -0.666 -0.403  0.049  0.039 -0.026
temptrend_abs.sc:npp.sc                   0.027  0.023 -0.116  0.050 -0.131 -0.072 -0.023 -0.018  0.004
temptrend_abs.sc:veg.sc                   0.225 -0.308  0.055  0.044  0.027  0.048  0.031 -0.133  0.116
temptrend_abs.sc:duration.sc             -0.064  0.147  0.020 -0.086 -0.033  0.033  0.001  0.020 -0.059
temptrend_abs.sc:human_bowler.sc          0.242 -0.331 -0.037 -0.055 -0.037 -0.159  0.096  0.004  0.106
temptrend_abs.sc:tsign-1:thermal_bias.sc  0.049 -0.049 -0.379  0.107  0.218  0.025 -0.004  0.036 -0.095
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.140  0.284  0.118 -0.001  0.450  0.297 -0.010 -0.009  0.032
                                         nspp.s npp.sc veg.sc drtn.s hmn_b. tm_.:1 tmptrnd_bs.sc:t_.
temptrend_abs.sc                                                                                    
tsign1                                                                                              
tempave_metab.sc                                                                                    
seas.sc                                                                                             
microclim.sc                                                                                        
mass.sc                                                                                             
speed.sc                                                                                            
consumerfrac.sc                                                                                     
nspp.sc                                                                                             
npp.sc                                   -0.064                                                     
veg.sc                                   -0.038 -0.553                                              
duration.sc                              -0.012 -0.020 -0.022                                       
human_bowler.sc                           0.019 -0.190  0.287 -0.127                                
temptrend_abs.sc:tsign1                  -0.013 -0.123  0.012  0.122 -0.120                         
temptrend_abs.sc:tempave_metab.sc         0.065  0.034  0.059 -0.090 -0.025 -0.077                  
temptrend_abs.sc:seas.sc                  0.073 -0.106  0.012 -0.028 -0.077  0.146  0.033           
temptrend_abs.sc:microclim.sc             0.090 -0.089  0.054  0.026 -0.139  0.232  0.001           
temptrend_abs.sc:mass.sc                  0.018 -0.026  0.020  0.031  0.088  0.053  0.063           
temptrend_abs.sc:speed.sc                -0.016 -0.007 -0.133  0.034  0.004 -0.073 -0.598           
temptrend_abs.sc:consumerfrac.sc          0.017  0.007  0.087 -0.118  0.068  0.101  0.017           
temptrend_abs.sc:nspp.sc                 -0.603  0.011  0.028 -0.007  0.055  0.019 -0.015           
tsign-1:thermal_bias.sc                   0.004  0.115 -0.079 -0.062  0.055 -0.214  0.119           
tsign1:thermal_bias.sc                   -0.028  0.143 -0.091 -0.017  0.084  0.301  0.012           
temptrend_abs.sc:npp.sc                   0.003 -0.880  0.494  0.021  0.147  0.149 -0.046           
temptrend_abs.sc:veg.sc                   0.013  0.504 -0.847  0.026 -0.301 -0.005 -0.071           
temptrend_abs.sc:duration.sc              0.152  0.001  0.010 -0.250  0.105 -0.223  0.094           
temptrend_abs.sc:human_bowler.sc          0.032  0.135 -0.334  0.116 -0.798  0.151  0.051           
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.015 -0.268  0.129  0.041 -0.116  0.635 -0.107           
temptrend_abs.sc:tsign1:thermal_bias.sc   0.026 -0.186  0.122 -0.028 -0.006 -0.369 -0.014           
                                         tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms.
temptrend_abs.sc                                                                              
tsign1                                                                                        
tempave_metab.sc                                                                              
seas.sc                                                                                       
microclim.sc                                                                                  
mass.sc                                                                                       
speed.sc                                                                                      
consumerfrac.sc                                                                               
nspp.sc                                                                                       
npp.sc                                                                                        
veg.sc                                                                                        
duration.sc                                                                                   
human_bowler.sc                                                                               
temptrend_abs.sc:tsign1                                                                       
temptrend_abs.sc:tempave_metab.sc                                                             
temptrend_abs.sc:seas.sc                                                                      
temptrend_abs.sc:microclim.sc             0.453                                               
temptrend_abs.sc:mass.sc                  0.028             0.039                             
temptrend_abs.sc:speed.sc                -0.029            -0.063            -0.439           
temptrend_abs.sc:consumerfrac.sc         -0.017             0.081             0.549           
temptrend_abs.sc:nspp.sc                 -0.055            -0.058             0.002           
tsign-1:thermal_bias.sc                   0.198             0.050             0.011           
tsign1:thermal_bias.sc                    0.496             0.298             0.021           
temptrend_abs.sc:npp.sc                   0.078             0.074             0.011           
temptrend_abs.sc:veg.sc                   0.016            -0.034            -0.028           
temptrend_abs.sc:duration.sc              0.012            -0.038            -0.011           
temptrend_abs.sc:human_bowler.sc          0.066             0.201            -0.080           
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.305            -0.022             0.054           
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.615            -0.339            -0.018           
                                         tmptrnd_bs.sc:sp. tmptrnd_bs.sc:c. tmptrnd_bs.sc:ns. t-1:_.
temptrend_abs.sc                                                                                    
tsign1                                                                                              
tempave_metab.sc                                                                                    
seas.sc                                                                                             
microclim.sc                                                                                        
mass.sc                                                                                             
speed.sc                                                                                            
consumerfrac.sc                                                                                     
nspp.sc                                                                                             
npp.sc                                                                                              
veg.sc                                                                                              
duration.sc                                                                                         
human_bowler.sc                                                                                     
temptrend_abs.sc:tsign1                                                                             
temptrend_abs.sc:tempave_metab.sc                                                                   
temptrend_abs.sc:seas.sc                                                                            
temptrend_abs.sc:microclim.sc                                                                       
temptrend_abs.sc:mass.sc                                                                            
temptrend_abs.sc:speed.sc                                                                           
temptrend_abs.sc:consumerfrac.sc         -0.699                                                     
temptrend_abs.sc:nspp.sc                 -0.032             0.012                                   
tsign-1:thermal_bias.sc                  -0.014            -0.061            0.022                  
tsign1:thermal_bias.sc                   -0.027             0.039            0.049             0.281
temptrend_abs.sc:npp.sc                   0.033            -0.034           -0.024            -0.123
temptrend_abs.sc:veg.sc                   0.147            -0.097           -0.050             0.076
temptrend_abs.sc:duration.sc             -0.015             0.043           -0.259             0.026
temptrend_abs.sc:human_bowler.sc         -0.030            -0.066           -0.053            -0.040
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.045             0.083           -0.009            -0.457
temptrend_abs.sc:tsign1:thermal_bias.sc   0.016            -0.024           -0.077            -0.196
                                         ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v. tmptrnd_bs.sc:d.
temptrend_abs.sc                                                                                   
tsign1                                                                                             
tempave_metab.sc                                                                                   
seas.sc                                                                                            
microclim.sc                                                                                       
mass.sc                                                                                            
speed.sc                                                                                           
consumerfrac.sc                                                                                    
nspp.sc                                                                                            
npp.sc                                                                                             
veg.sc                                                                                             
duration.sc                                                                                        
human_bowler.sc                                                                                    
temptrend_abs.sc:tsign1                                                                            
temptrend_abs.sc:tempave_metab.sc                                                                  
temptrend_abs.sc:seas.sc                                                                           
temptrend_abs.sc:microclim.sc                                                                      
temptrend_abs.sc:mass.sc                                                                           
temptrend_abs.sc:speed.sc                                                                          
temptrend_abs.sc:consumerfrac.sc                                                                   
temptrend_abs.sc:nspp.sc                                                                           
tsign-1:thermal_bias.sc                                                                            
tsign1:thermal_bias.sc                                                                             
temptrend_abs.sc:npp.sc                  -0.152                                                    
temptrend_abs.sc:veg.sc                   0.111 -0.609                                             
temptrend_abs.sc:duration.sc             -0.064 -0.005             0.004                           
temptrend_abs.sc:human_bowler.sc         -0.044 -0.180             0.418           -0.105          
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.267  0.311            -0.156           -0.092          
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.831  0.198            -0.155            0.085          
                                         tmptrnd_bs.sc:h_. t_.:-1
temptrend_abs.sc                                                 
tsign1                                                           
tempave_metab.sc                                                 
seas.sc                                                          
microclim.sc                                                     
mass.sc                                                          
speed.sc                                                         
consumerfrac.sc                                                  
nspp.sc                                                          
npp.sc                                                           
veg.sc                                                           
duration.sc                                                      
human_bowler.sc                                                  
temptrend_abs.sc:tsign1                                          
temptrend_abs.sc:tempave_metab.sc                                
temptrend_abs.sc:seas.sc                                         
temptrend_abs.sc:microclim.sc                                    
temptrend_abs.sc:mass.sc                                         
temptrend_abs.sc:speed.sc                                        
temptrend_abs.sc:consumerfrac.sc                                 
temptrend_abs.sc:nspp.sc                                         
tsign-1:thermal_bias.sc                                          
tsign1:thermal_bias.sc                                           
temptrend_abs.sc:npp.sc                                          
temptrend_abs.sc:veg.sc                                          
temptrend_abs.sc:duration.sc                                     
temptrend_abs.sc:human_bowler.sc                                 
temptrend_abs.sc:tsign-1:thermal_bias.sc  0.169                  
temptrend_abs.sc:tsign1:thermal_bias.sc   0.038             0.319

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.32506581 -0.38770014 -0.04491269  0.36618931  5.19217938 

Number of Observations: 2299
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                    90                   2299 
summary(modTfullHornFresh)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev       Corr  
(Intercept)      3.088553e-08 (Intr)
temptrend_abs.sc 2.055026e-02 0.025 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.02085277  2.44783

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.345198 
Fixed effects: Horntrendrem0 ~ temptrend_abs.sc * tsign + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * nspp.sc + temptrend_abs.sc *      thermal_bias.sc:tsign + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      veg.sc + temptrend_abs.sc * duration.sc + temptrend_abs.sc *      human_bowler.sc 
 Correlation: 
                                         (Intr) tmpt_. tsign1 tmpv_. ses.sc mcrcl. mss.sc spd.sc nspp.s
temptrend_abs.sc                         -0.602                                                        
tsign1                                   -0.231  0.096                                                 
tempave_metab.sc                          0.484 -0.185  0.121                                          
seas.sc                                   0.008 -0.055  0.022  0.354                                   
microclim.sc                             -0.132  0.056  0.107  0.381  0.099                            
mass.sc                                  -0.034  0.042 -0.073 -0.301  0.196 -0.393                     
speed.sc                                  0.241 -0.155  0.004  0.232  0.111  0.078 -0.670              
nspp.sc                                   0.125 -0.007 -0.163 -0.343 -0.442 -0.166  0.205 -0.078       
npp.sc                                   -0.272 -0.025  0.019 -0.132  0.452  0.147  0.096 -0.007 -0.032
veg.sc                                   -0.543  0.574 -0.027 -0.010 -0.068 -0.128 -0.108  0.065 -0.146
duration.sc                              -0.134  0.121 -0.187  0.102 -0.026  0.072 -0.112  0.023 -0.208
human_bowler.sc                           0.065  0.062 -0.078 -0.106 -0.267 -0.011  0.165 -0.105 -0.048
temptrend_abs.sc:tsign1                   0.171 -0.362 -0.534 -0.016 -0.013 -0.007 -0.046  0.047  0.081
temptrend_abs.sc:tempave_metab.sc        -0.159  0.098 -0.029 -0.614 -0.427 -0.311  0.204 -0.189  0.196
temptrend_abs.sc:seas.sc                 -0.021  0.063  0.027 -0.352 -0.697 -0.152 -0.026 -0.180  0.187
temptrend_abs.sc:microclim.sc             0.039  0.000  0.013 -0.258 -0.174 -0.622  0.213 -0.074  0.034
temptrend_abs.sc:mass.sc                 -0.016 -0.069 -0.010  0.150 -0.015  0.239 -0.674  0.446 -0.105
temptrend_abs.sc:speed.sc                -0.130  0.244  0.058 -0.123 -0.179 -0.049  0.420 -0.644  0.022
temptrend_abs.sc:nspp.sc                 -0.072 -0.009  0.157  0.177  0.134  0.083 -0.160 -0.005 -0.624
tsign-1:thermal_bias.sc                   0.429 -0.242 -0.411  0.253  0.043  0.065 -0.035  0.048  0.091
tsign1:thermal_bias.sc                    0.218 -0.069  0.138  0.581  0.367  0.124  0.040  0.015 -0.204
temptrend_abs.sc:npp.sc                   0.014  0.271  0.009 -0.067 -0.351 -0.074 -0.028 -0.023  0.022
temptrend_abs.sc:veg.sc                   0.354 -0.817  0.020 -0.011  0.016  0.060  0.023 -0.036  0.006
temptrend_abs.sc:duration.sc              0.043 -0.011 -0.037  0.044  0.153  0.060  0.045  0.061  0.117
temptrend_abs.sc:human_bowler.sc         -0.018 -0.038  0.025  0.193  0.275  0.108 -0.232  0.190  0.007
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.223  0.440  0.187 -0.198 -0.170 -0.066  0.098 -0.065  0.040
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.099  0.022 -0.106 -0.344 -0.342 -0.044 -0.075 -0.026  0.075
                                         npp.sc veg.sc drtn.s hmn_b. tm_.:1 tmptrnd_bs.sc:t_.
temptrend_abs.sc                                                                             
tsign1                                                                                       
tempave_metab.sc                                                                             
seas.sc                                                                                      
microclim.sc                                                                                 
mass.sc                                                                                      
speed.sc                                                                                     
nspp.sc                                                                                      
npp.sc                                                                                       
veg.sc                                   -0.358                                              
duration.sc                               0.041  0.119                                       
human_bowler.sc                          -0.123  0.057  0.041                                
temptrend_abs.sc:tsign1                  -0.018 -0.047  0.054 -0.032                         
temptrend_abs.sc:tempave_metab.sc        -0.151 -0.024 -0.045  0.298 -0.040                  
temptrend_abs.sc:seas.sc                 -0.353  0.010  0.000  0.322 -0.050  0.779           
temptrend_abs.sc:microclim.sc            -0.108  0.098 -0.008  0.118 -0.070  0.524           
temptrend_abs.sc:mass.sc                  0.021  0.040  0.076 -0.298  0.097 -0.376           
temptrend_abs.sc:speed.sc                -0.042 -0.028  0.001  0.200 -0.093  0.226           
temptrend_abs.sc:nspp.sc                 -0.031  0.046  0.116 -0.059 -0.111 -0.251           
tsign-1:thermal_bias.sc                   0.126 -0.256  0.003  0.055  0.244 -0.183           
tsign1:thermal_bias.sc                    0.124  0.060  0.027  0.188 -0.140 -0.399           
temptrend_abs.sc:npp.sc                  -0.690  0.340 -0.066  0.117  0.033  0.341           
temptrend_abs.sc:veg.sc                   0.244 -0.692 -0.075 -0.037  0.106  0.071           
temptrend_abs.sc:duration.sc              0.044 -0.090 -0.342 -0.061  0.021 -0.044           
temptrend_abs.sc:human_bowler.sc          0.116  0.005 -0.030 -0.709  0.056 -0.499           
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.246  0.236 -0.021  0.087 -0.477  0.423           
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.216 -0.030  0.076 -0.004  0.173  0.585           
                                         tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms.
temptrend_abs.sc                                                                              
tsign1                                                                                        
tempave_metab.sc                                                                              
seas.sc                                                                                       
microclim.sc                                                                                  
mass.sc                                                                                       
speed.sc                                                                                      
nspp.sc                                                                                       
npp.sc                                                                                        
veg.sc                                                                                        
duration.sc                                                                                   
human_bowler.sc                                                                               
temptrend_abs.sc:tsign1                                                                       
temptrend_abs.sc:tempave_metab.sc                                                             
temptrend_abs.sc:seas.sc                                                                      
temptrend_abs.sc:microclim.sc             0.397                                               
temptrend_abs.sc:mass.sc                 -0.201            -0.358                             
temptrend_abs.sc:speed.sc                 0.319             0.166            -0.674           
temptrend_abs.sc:nspp.sc                 -0.150            -0.005             0.180           
tsign-1:thermal_bias.sc                  -0.117            -0.061             0.052           
tsign1:thermal_bias.sc                   -0.320            -0.052            -0.104           
temptrend_abs.sc:npp.sc                   0.459             0.196            -0.075           
temptrend_abs.sc:veg.sc                   0.032            -0.138            -0.023           
temptrend_abs.sc:duration.sc             -0.210            -0.189            -0.003           
temptrend_abs.sc:human_bowler.sc         -0.501            -0.182             0.480           
temptrend_abs.sc:tsign-1:thermal_bias.sc  0.374             0.182            -0.228           
temptrend_abs.sc:tsign1:thermal_bias.sc   0.520             0.087             0.003           
                                         tmptrnd_bs.sc:sp. tmptrnd_bs.sc:ns. t-1:_. ts1:_.
temptrend_abs.sc                                                                          
tsign1                                                                                    
tempave_metab.sc                                                                          
seas.sc                                                                                   
microclim.sc                                                                              
mass.sc                                                                                   
speed.sc                                                                                  
nspp.sc                                                                                   
npp.sc                                                                                    
veg.sc                                                                                    
duration.sc                                                                               
human_bowler.sc                                                                           
temptrend_abs.sc:tsign1                                                                   
temptrend_abs.sc:tempave_metab.sc                                                         
temptrend_abs.sc:seas.sc                                                                  
temptrend_abs.sc:microclim.sc                                                             
temptrend_abs.sc:mass.sc                                                                  
temptrend_abs.sc:speed.sc                                                                 
temptrend_abs.sc:nspp.sc                  0.016                                           
tsign-1:thermal_bias.sc                  -0.035            -0.028                         
tsign1:thermal_bias.sc                    0.034             0.041             0.196       
temptrend_abs.sc:npp.sc                   0.013             0.050            -0.173 -0.199
temptrend_abs.sc:veg.sc                   0.016            -0.022             0.144 -0.042
temptrend_abs.sc:duration.sc             -0.108            -0.279             0.071  0.059
temptrend_abs.sc:human_bowler.sc         -0.329             0.004            -0.006 -0.029
temptrend_abs.sc:tsign-1:thermal_bias.sc  0.072            -0.085            -0.534 -0.177
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.045            -0.045            -0.159 -0.711
                                         tmptrnd_bs.sc:np. tmptrnd_bs.sc:v. tmptrnd_bs.sc:d.
temptrend_abs.sc                                                                            
tsign1                                                                                      
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
duration.sc                                                                                 
human_bowler.sc                                                                             
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                                                                    
temptrend_abs.sc:microclim.sc                                                               
temptrend_abs.sc:mass.sc                                                                    
temptrend_abs.sc:speed.sc                                                                   
temptrend_abs.sc:nspp.sc                                                                    
tsign-1:thermal_bias.sc                                                                     
tsign1:thermal_bias.sc                                                                      
temptrend_abs.sc:npp.sc                                                                     
temptrend_abs.sc:veg.sc                  -0.513                                             
temptrend_abs.sc:duration.sc             -0.047             0.116                           
temptrend_abs.sc:human_bowler.sc         -0.145            -0.075            0.053          
temptrend_abs.sc:tsign-1:thermal_bias.sc  0.494            -0.339           -0.057          
temptrend_abs.sc:tsign1:thermal_bias.sc   0.411             0.068           -0.056          
                                         tmptrnd_bs.sc:h_. t_.:-1
temptrend_abs.sc                                                 
tsign1                                                           
tempave_metab.sc                                                 
seas.sc                                                          
microclim.sc                                                     
mass.sc                                                          
speed.sc                                                         
nspp.sc                                                          
npp.sc                                                           
veg.sc                                                           
duration.sc                                                      
human_bowler.sc                                                  
temptrend_abs.sc:tsign1                                          
temptrend_abs.sc:tempave_metab.sc                                
temptrend_abs.sc:seas.sc                                         
temptrend_abs.sc:microclim.sc                                    
temptrend_abs.sc:mass.sc                                         
temptrend_abs.sc:speed.sc                                        
temptrend_abs.sc:nspp.sc                                         
tsign-1:thermal_bias.sc                                          
tsign1:thermal_bias.sc                                           
temptrend_abs.sc:npp.sc                                          
temptrend_abs.sc:veg.sc                                          
temptrend_abs.sc:duration.sc                                     
temptrend_abs.sc:human_bowler.sc                                 
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.153                  
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.145             0.337

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-4.25987257 -0.29069598 -0.02883191  0.25023757  5.23849247 

Number of Observations: 608
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                    18                    608 
summary(modTfullHornMar)
Linear mixed-effects model fit by REML
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.02167793 (Intr)
temptrend_abs.sc 0.02656924 0.035 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.02055808 2.782391

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.432839 
Fixed effects: Horntrendrem0 ~ temptrend_abs.sc * tsign + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * consumerfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * duration.sc + temptrend_abs.sc *      human_bowler.sc 
 Correlation: 
                                         (Intr) tmpt_. tsign1 tmpv_. ses.sc mcrcl. mss.sc spd.sc cnsmr.
temptrend_abs.sc                         -0.263                                                        
tsign1                                   -0.188  0.115                                                 
tempave_metab.sc                          0.102 -0.003  0.022                                          
seas.sc                                   0.185 -0.084 -0.091  0.221                                   
microclim.sc                              0.037 -0.045  0.008 -0.204  0.067                            
mass.sc                                   0.058 -0.033  0.000  0.062  0.037  0.012                     
speed.sc                                  0.153 -0.080 -0.079  0.072  0.073  0.039 -0.434              
consumerfrac.sc                           0.000  0.012  0.029 -0.068 -0.012  0.012 -0.055  0.000       
nspp.sc                                  -0.131  0.096  0.058 -0.114  0.092 -0.084 -0.105  0.204  0.112
npp.sc                                   -0.043  0.057 -0.002 -0.053 -0.345 -0.238 -0.024  0.081 -0.040
duration.sc                               0.041 -0.022 -0.137  0.053 -0.064 -0.016 -0.001 -0.016 -0.016
human_bowler.sc                          -0.030  0.030  0.005  0.098 -0.193  0.005 -0.026  0.040 -0.055
temptrend_abs.sc:tsign1                   0.089 -0.249 -0.520 -0.048 -0.009 -0.003  0.008  0.032 -0.017
temptrend_abs.sc:tempave_metab.sc        -0.031  0.078 -0.081 -0.437 -0.161  0.032 -0.019  0.058  0.040
temptrend_abs.sc:seas.sc                 -0.078  0.140  0.048 -0.144 -0.689 -0.051 -0.018 -0.038 -0.016
temptrend_abs.sc:microclim.sc            -0.022  0.066 -0.016  0.131 -0.010 -0.723  0.014 -0.028 -0.003
temptrend_abs.sc:mass.sc                  0.002  0.093  0.012 -0.038 -0.016  0.026 -0.573  0.252  0.060
temptrend_abs.sc:speed.sc                -0.031  0.176  0.047  0.026 -0.018 -0.039  0.237 -0.575  0.016
temptrend_abs.sc:consumerfrac.sc         -0.013 -0.027 -0.018  0.051  0.006  0.017  0.052  0.007 -0.719
temptrend_abs.sc:nspp.sc                  0.038 -0.174 -0.024  0.031 -0.065  0.046  0.026 -0.170 -0.064
tsign-1:thermal_bias.sc                   0.037  0.000 -0.166  0.241 -0.140 -0.031 -0.046  0.047 -0.004
tsign1:thermal_bias.sc                    0.006 -0.004  0.129  0.432 -0.171 -0.128 -0.002  0.027 -0.005
temptrend_abs.sc:npp.sc                   0.007 -0.082  0.014  0.031  0.208  0.182 -0.009 -0.036  0.014
temptrend_abs.sc:duration.sc             -0.104  0.249  0.028  0.111  0.011 -0.038  0.036  0.016  0.030
temptrend_abs.sc:human_bowler.sc          0.029 -0.029 -0.017 -0.067  0.145 -0.007  0.023 -0.033  0.133
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.012  0.010  0.028 -0.091  0.105  0.023  0.013  0.009 -0.003
temptrend_abs.sc:tsign1:thermal_bias.sc   0.006 -0.004 -0.104 -0.174  0.072  0.038  0.012  0.042 -0.019
                                         nspp.s npp.sc drtn.s hmn_b. tm_.:1 tmptrnd_bs.sc:t_.
temptrend_abs.sc                                                                             
tsign1                                                                                       
tempave_metab.sc                                                                             
seas.sc                                                                                      
microclim.sc                                                                                 
mass.sc                                                                                      
speed.sc                                                                                     
consumerfrac.sc                                                                              
nspp.sc                                                                                      
npp.sc                                   -0.237                                              
duration.sc                              -0.279  0.065                                       
human_bowler.sc                          -0.051 -0.158  0.018                                
temptrend_abs.sc:tsign1                  -0.036 -0.002  0.018 -0.006                         
temptrend_abs.sc:tempave_metab.sc         0.038  0.018  0.022 -0.044  0.092                  
temptrend_abs.sc:seas.sc                 -0.057  0.261  0.016  0.155  0.013  0.196           
temptrend_abs.sc:microclim.sc             0.052  0.180  0.004 -0.028 -0.019  0.029           
temptrend_abs.sc:mass.sc                  0.028 -0.019  0.033  0.031 -0.013  0.041           
temptrend_abs.sc:speed.sc                -0.167 -0.017  0.027 -0.043 -0.019 -0.156           
temptrend_abs.sc:consumerfrac.sc         -0.087  0.016 -0.004  0.075  0.046 -0.049           
temptrend_abs.sc:nspp.sc                 -0.643  0.144  0.179  0.044  0.032 -0.064           
tsign-1:thermal_bias.sc                  -0.055 -0.011  0.077  0.141  0.042 -0.054           
tsign1:thermal_bias.sc                   -0.059 -0.118  0.093  0.170 -0.076 -0.125           
temptrend_abs.sc:npp.sc                   0.133 -0.656 -0.036  0.097 -0.050 -0.027           
temptrend_abs.sc:duration.sc              0.253 -0.038 -0.484  0.034 -0.079 -0.042           
temptrend_abs.sc:human_bowler.sc          0.039  0.105 -0.005 -0.735  0.018  0.089           
temptrend_abs.sc:tsign-1:thermal_bias.sc  0.008 -0.003 -0.030 -0.083  0.059  0.277           
temptrend_abs.sc:tsign1:thermal_bias.sc   0.015  0.082 -0.046 -0.122  0.164  0.469           
                                         tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms.
temptrend_abs.sc                                                                              
tsign1                                                                                        
tempave_metab.sc                                                                              
seas.sc                                                                                       
microclim.sc                                                                                  
mass.sc                                                                                       
speed.sc                                                                                      
consumerfrac.sc                                                                               
nspp.sc                                                                                       
npp.sc                                                                                        
duration.sc                                                                                   
human_bowler.sc                                                                               
temptrend_abs.sc:tsign1                                                                       
temptrend_abs.sc:tempave_metab.sc                                                             
temptrend_abs.sc:seas.sc                                                                      
temptrend_abs.sc:microclim.sc             0.053                                               
temptrend_abs.sc:mass.sc                  0.005            -0.063                             
temptrend_abs.sc:speed.sc                 0.067             0.051            -0.412           
temptrend_abs.sc:consumerfrac.sc         -0.029            -0.039            -0.112           
temptrend_abs.sc:nspp.sc                  0.061            -0.014            -0.009           
tsign-1:thermal_bias.sc                   0.091             0.011             0.023           
tsign1:thermal_bias.sc                    0.065             0.049             0.017           
temptrend_abs.sc:npp.sc                  -0.379            -0.338             0.065           
temptrend_abs.sc:duration.sc             -0.046             0.044            -0.068           
temptrend_abs.sc:human_bowler.sc         -0.171            -0.022            -0.025           
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.127            -0.034            -0.014           
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.069            -0.123            -0.016           
                                         tmptrnd_bs.sc:sp. tmptrnd_bs.sc:c. tmptrnd_bs.sc:ns. t-1:_.
temptrend_abs.sc                                                                                    
tsign1                                                                                              
tempave_metab.sc                                                                                    
seas.sc                                                                                             
microclim.sc                                                                                        
mass.sc                                                                                             
speed.sc                                                                                            
consumerfrac.sc                                                                                     
nspp.sc                                                                                             
npp.sc                                                                                              
duration.sc                                                                                         
human_bowler.sc                                                                                     
temptrend_abs.sc:tsign1                                                                             
temptrend_abs.sc:tempave_metab.sc                                                                   
temptrend_abs.sc:seas.sc                                                                            
temptrend_abs.sc:microclim.sc                                                                       
temptrend_abs.sc:mass.sc                                                                            
temptrend_abs.sc:speed.sc                                                                           
temptrend_abs.sc:consumerfrac.sc         -0.042                                                     
temptrend_abs.sc:nspp.sc                  0.212             0.115                                   
tsign-1:thermal_bias.sc                  -0.015            -0.001            0.009                  
tsign1:thermal_bias.sc                   -0.004             0.002            0.000             0.358
temptrend_abs.sc:npp.sc                  -0.012            -0.003           -0.152            -0.005
temptrend_abs.sc:duration.sc             -0.044             0.024           -0.356            -0.028
temptrend_abs.sc:human_bowler.sc          0.038            -0.153           -0.057            -0.092
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.047             0.029           -0.009            -0.482
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.124             0.050           -0.033            -0.177
                                         ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:d. tmptrnd_bs.sc:h_.
temptrend_abs.sc                                                                                    
tsign1                                                                                              
tempave_metab.sc                                                                                    
seas.sc                                                                                             
microclim.sc                                                                                        
mass.sc                                                                                             
speed.sc                                                                                            
consumerfrac.sc                                                                                     
nspp.sc                                                                                             
npp.sc                                                                                              
duration.sc                                                                                         
human_bowler.sc                                                                                     
temptrend_abs.sc:tsign1                                                                             
temptrend_abs.sc:tempave_metab.sc                                                                   
temptrend_abs.sc:seas.sc                                                                            
temptrend_abs.sc:microclim.sc                                                                       
temptrend_abs.sc:mass.sc                                                                            
temptrend_abs.sc:speed.sc                                                                           
temptrend_abs.sc:consumerfrac.sc                                                                    
temptrend_abs.sc:nspp.sc                                                                            
tsign-1:thermal_bias.sc                                                                             
tsign1:thermal_bias.sc                                                                              
temptrend_abs.sc:npp.sc                   0.086                                                     
temptrend_abs.sc:duration.sc             -0.055  0.054                                              
temptrend_abs.sc:human_bowler.sc         -0.124 -0.140            -0.020                            
temptrend_abs.sc:tsign-1:thermal_bias.sc -0.174  0.011             0.066            0.087           
temptrend_abs.sc:tsign1:thermal_bias.sc  -0.571 -0.084             0.037            0.137           
                                         t_.:-1
temptrend_abs.sc                               
tsign1                                         
tempave_metab.sc                               
seas.sc                                        
microclim.sc                                   
mass.sc                                        
speed.sc                                       
consumerfrac.sc                                
nspp.sc                                        
npp.sc                                         
duration.sc                                    
human_bowler.sc                                
temptrend_abs.sc:tsign1                        
temptrend_abs.sc:tempave_metab.sc              
temptrend_abs.sc:seas.sc                       
temptrend_abs.sc:microclim.sc                  
temptrend_abs.sc:mass.sc                       
temptrend_abs.sc:speed.sc                      
temptrend_abs.sc:consumerfrac.sc               
temptrend_abs.sc:nspp.sc                       
tsign-1:thermal_bias.sc                        
tsign1:thermal_bias.sc                         
temptrend_abs.sc:npp.sc                        
temptrend_abs.sc:duration.sc                   
temptrend_abs.sc:human_bowler.sc               
temptrend_abs.sc:tsign-1:thermal_bias.sc       
temptrend_abs.sc:tsign1:thermal_bias.sc   0.341

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.59847381 -0.21790065 -0.02487884  0.21515504  5.76491820 

Number of Observations: 32420
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                    92                  32420 

Plot the realm-specific coefficients

Also uses the full models across all realms


coefs1 <- summary(modTfullHornrem0)$tTable
coefs2 <- summary(modTfullHornTerr)$tTable
coefs3 <- summary(modTfullHornFresh)$tTable
coefs4 <- summary(modTfullHornMar)$tTable

varstoplot <- unique(c(rownames(coefs1), rownames(coefs2), rownames(coefs3), rownames(coefs4)))
varstoplot <- varstoplot[which(!grepl('Intercept', varstoplot) | grepl(':', varstoplot))] # vars to plot

rows1_1 <- which(rownames(coefs1) %in% varstoplot) # rows in coefs
rows1_2 <- which(rownames(coefs2) %in% varstoplot)
rows1_3 <- which(rownames(coefs3) %in% varstoplot)
rows1_4 <- which(rownames(coefs4) %in% varstoplot)
xlims <- range(c(coefs1[rows1_1,1] - coefs1[rows1_1,2], coefs1[rows1_1,1] + coefs1[rows1_1,2], 
                 coefs2[rows1_2,1] - coefs2[rows1_2,2], coefs2[rows1_2,1] + coefs2[rows1_2,2], 
                 coefs3[rows1_3,1] - coefs3[rows1_3,2], coefs3[rows1_3,1] + coefs3[rows1_3,2],
                 coefs4[rows1_4,1] - coefs4[rows1_4,2], coefs4[rows1_4,1] + coefs4[rows1_4,2]))


cols <- brewer.pal(4, 'Dark2') # for full, terr, fresh, mar
pchs <- c(1, 16, 16, 16)
offs <- c(0.1, 0, -0.1, -0.2) # offset vertically for each model


par(las = 1, mai = c(0.5, 4, 0.1, 0.1))

plot(0,0, col = 'white', xlim = xlims, ylim = c(1,length(varstoplot)), yaxt='n', xlab = '', ylab ='')
axis(2, at = length(varstoplot):1, labels = varstoplot, cex.axis = 0.7)
abline(v = 0, col = 'grey', lty = 2)
abline(h = 1:length(varstoplot), col = 'grey', lty = 3)
for(i in 1:length(varstoplot)){
  if(varstoplot[i] %in% rownames(coefs1)){
    x = coefs1[rownames(coefs1) == varstoplot[i], 1]
    se = coefs1[rownames(coefs1) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[1], pch = pchs[1], col = cols[1])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[1], length(varstoplot) + 1 - i + offs[1]), col = cols[1])
  }
  if(varstoplot[i] %in% rownames(coefs2)){
    x = coefs2[rownames(coefs2) == varstoplot[i], 1]
    se = coefs2[rownames(coefs2) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[2], pch = pchs[2], col = cols[2])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[2], length(varstoplot) + 1 - i + offs[2]), col = cols[2])
  }
  if(varstoplot[i] %in% rownames(coefs3)){
    x = coefs3[rownames(coefs3) == varstoplot[i], 1]
    se = coefs3[rownames(coefs3) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[3], pch = pchs[3], col = cols[3])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[3], length(varstoplot) + 1 - i + offs[3]), col = cols[3])
  }
  if(varstoplot[i] %in% rownames(coefs4)){
    x = coefs4[rownames(coefs4) == varstoplot[i], 1]
    se = coefs4[rownames(coefs4) == varstoplot[i], 2]
    points(x, length(varstoplot) + 1 - i + offs[4], pch = pchs[4], col = cols[4])
    lines(x = c(x-se, x+se), y = c(length(varstoplot) + 1 - i + offs[4], length(varstoplot) + 1 - i + offs[4]), col = cols[4])
  }
}
legend('bottomleft', col = cols, pch = pchs, lwd = 1, legend = c('All', 'Terestrial', 'Freshwater', 'Marine'))

[End text in hopes this helps the last figure show up when knitted]

LS0tCnRpdGxlOiAnRHJpdmVycyBvZiB2YXJpYXRpb24gaW4gdGhlIGNvbW11bml0eSByZXNwb25zZSB0byB0ZW1wZXJhdHVyZSBjaGFuZ2UgYWNyb3NzIHJlYWxtcycKc3VidGl0bGU6ICcodXNpbmcgbWl4ZWQgZWZmZWN0cyBtb2RlbHMpJwpvdXRwdXQ6IAogICAgZ2l0aHViX2RvY3VtZW50OiBkZWZhdWx0CiAgICAjaHRtbF9kb2N1bWVudDogZGVmYXVsdAogICAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCkNvbGxhYm9yYXRvcnM6IFNoYW5lIEJsb3dlcywgSm9uIENoYXNlLCBIZWxtdXQgSGlsbGVicmFuZCwgTWljaGFlbCBCdXJyb3dzLCBBbWFuZGEgQmF0ZXMsIFVsaSBCcm9zZSwgQmVub2l0IEdhdXplbnMsIExhdXJhIEFudGFvLCBSdWJlbiBSZW1lbGdhZG8sIENhcnN0ZW4gTWV5ZXIsIE15cmlhbSBIaXJ0LCBtYXliZSBvdGhlcnMKQXNzaXN0YW5jZTogS2F0aGVyaW5lIExldywgSm9zZWYgSGF1c2VyCgojIEludHJvZHVjdGlvbgotIENsaW1hdGUgY2hhbmdlIGlzIGRyaXZpbmcgYSB3aWRlc3ByZWFkIHJlb3JnYW5pemF0aW9uIG9mIGVjb2xvZ2ljYWwgY29tbXVuaXRpZXMgYXJvdW5kIHRoZSB3b3JsZCAoUGFybXNlc2FuICYgWW9oZSAyMDAzLCBQb2xvY3phbnNrYSBldCBhbC4gMjAxMyksCi0gYnV0IHRoZSBpbXBhY3RzIG9mIGNsaW1hdGUgY2hhbmdlIHZhcnkgc3Vic3RhbnRpYWxseSBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyIGFuZCBhbW9uZyB0YXhhIChNb2xpbm9zIGV0IGFsLiAyMDE2IE5DQywgQW50YW8gZXQgYWwuIDIwMjAgTkVFKS4KLSBDb21tdW5pdHkgcmVvcmdhbml6YXRpb24gaXMgc3Vic3RhbnRpYWxseSBtb3JlIGNvbW1vbiB0aGFuIGFuIGFnZ3JlZ2F0ZSBsb3NzIG9yIGdhaW4gb2Ygc3BlY2llcyAoRG9ybmVsYXMgZXQgYWwuIDIwMTQgU2NpZW5jZSwgQmxvd2VzIGV0IGFsLiAyMDE5IFNjaWVuY2UsIEhpbGxlYnJhbmQgZXQgYWwuIDIwMTcgSiBBcHBsIEVjb2wpCi0gVGhlcmUgYXJlIG1hbnkgaHlwb3RoZXNlcyBmb3Igd2h5IHNvbWUgY29tbXVuaXRpZXMgYXJlIG1vcmUgc2Vuc2l0aXZlIHRvIHdhcm1pbmcgdGhhbiBvdGhlcnMsIGluY2x1ZGluZyBkaWZmZXJlbmNlcyBpbgogIC0gbWV0YWJvbGljIHJhdGVzIChEaWxsb24gZXQgYWwuIDIwMTAgTmF0dXJlKSwgCiAgLSB0aGVybWFsIHBoeXNpb2xvZ3kgKERldXRzY2ggZXQgYWwuIDIwMDggUE5BUywgUGluc2t5IGV0IGFsLiAyMDE5IE5hdHVyZSksIAogIC0gbWljcm9jbGltYXRlIGF2YWlsYWJpbGl0eSAoQnVycm93cyBldCBhbC4gMjAxOSBOQ0MsIFN1Z2dpdHQgZXQgYWwuIDIwMTggTkNDKSwKICAtIHNwZWNpZXMgbW9iaWxpdHkgKFBvbG9jemFuc2thIGV0IGFsLiAyMDEzIE5DQywgQnVycm93cyBldCBhbC4gMjAxMSBTY2llbmNlLCBTdW5kYXkgZXQgYWwuIDIwMTIgTkNDKQogIC0gb3IgZ2VuZXJhdGlvbiB0aW1lIChCZWF1Z3JhbmQgZXQgYWwuIDIwMDkgRFNSIElJLCBQb2xvY3phbnNrYSBldCBhbC4gMjAxMyBOQ0MpLAogIC0gY29uc3VtZXJzIHZzLiBwcm9kdWNlcnMgKFBldGNoZXkgZXQgYWwuIDE5OTkgTmF0dXJlKQogIC0gY29tbXVuaXR5IGNvbXBvc2l0aW9uIChTdHVhcnQtU21pdGggZXQgYWwuIDIwMTUgTmF0dXJlLCBCZWF1Z3JhbmQgZXQgYS4gMjAxNSBOQ0MsIFRyaXNvcyBldCBhbC4gMjAyMCBOYXR1cmUpLCAKICAtIGVjb3N5c3RlbSBwcm9kdWN0aXZpdHkgKFRob21hcyBldCBhbC4gMjAxNyBHQ0IsIEJyZXR0IDE5NzEgQW0gWm9vKSwKICAtIGV4cG9zdXJlIHRvIGh1bWFuIGltcGFjdHMgKFdoaXRlICYgS2VyciAyMDA2IEVjb2dyYXBoeSkKICAtIGFuZCBhbW9uZyByZWFsbXMgKEFudGFvIGV0IGFsLiAyMDIwIE5FRSkuCi0gU2NhbGluZyB1cCBmcm9tIG9yZ2FuaXNtYWwgZWZmZWN0cyB0byB3aG9sZSBlY29sb2dpY2FsIGNvbW11bml0aWVzIGlzIGNvbXBsZXgsIGFuZCB5ZXQgdGhlc2Ugc2NhbGVzIGFyZSBjcml0aWNhbCBmb3IgZWNvc3lzdGVtIGZ1bmN0aW9uaW5nIGFuZCBodW1hbiB3ZWxsLWJlaW5nLiAKLSBUaGVyZSBpcyBhIG5lZWQgZm9yIGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHRvIHVuZGVyc3RhbmQgd2hlcmUgd2FybWluZyBpcyBkcml2aW5nIGFuZCBpcyBsaWtlbHkgdG8gZHJpdmUgdGhlIG1vc3QgZHJhbWF0aWMgY29tbXVuaXR5IHR1cm5vdmVyCgojIE1ldGhvZHMKLSBCaW9UaW1lIGRhdGFzZXQsIGdyaWRkZWQgdG8gOTYga20yIGhleGFnb25zLCBzdW1tYXJpemVkIGFzIHRlbXBvcmFsIHR1cm5vdmVyIChCbG93ZXMpCiAgLSBUZW1wb3JhbCBzbG9wZSBvZiBKYWNjYXJkIHR1cm5vdmVyIGNvbXBhcmVkIHRvIHRoZSBmaXJzdCB5ZWFyIChOT1QgaW5jbHVkaW5nIHRoZSBmaXJzdCB5ZWFyIGNvbXBhcmVkIHRvIGl0c2VsZikKICAtIFNhbWUgZm9yIEphY2NhcmQgdG90YWwKICAtIGFuZCBNb3Jpc2l0YS1Ib3JuIHR1cm5vdmVyCi0gRXhwbGFuYXRvcnkgdmFyaWFibGVzIGNvbnNpZGVyZWQgZm9yIGRpZmZlcmVuY2VzIGluIHJhdGUgb2YgdHVybm92ZXI6CiAgLSBUZW1wZXJhdHVyZSB0cmVuZCBvdmVyIHRoZSB0aW1lLWZyYW1lIG9mIGVhY2ggdGltZS1zZXJpZXMgKENSVSBUUyA0LjAzIG9uIGxhbmQgYW5kIGluIGZyZXNod2F0ZXIsIEVSU1NUIHY1IGluIHRoZSBvY2VhbikKICAtIFNlYXNvbmFsaXR5IGFzIGEgbWV0cmljIG9mIHRoZXJtYWwgc2Vuc2l0aXZpdHkgKERldXRzY2ggZXQgYWwuIDIwMDggUE5BUykuIFN0YW5kYXJkIGRldmlhdGlvbiBvZiBtb250aGx5IHRlbXBlcmF0dXJlcy4KICAtIE1pY3JvY2xpbWF0ZXMgY2FsY3VsYXRlZCBmcm9tIFdvcmxkQ2xpbSBhbmQgQmlvT3JhY2xlIChMYXVyYSBBbnRhbykKICAtIEJvZHkgbWFzcywgY29sbGF0ZWQgZnJvbSBkYXRhYmFzZXMgYW5kIGxpdGVyYXR1cmUgc2VhcmNoZXMKICAtIE1ldGFib2xpYyB0ZW1wZXJhdHVyZSwgZnJvbSBhdmVyYWdlIHRlbXBlcmF0dXJlIGlmIGVjdG90aGVybXMgKERpbGxvbiBldCBhbC4gMjAxMCBOYXR1cmUsIEFudGFvIGV0IGFsLiAyMDIwIE5hdCBFJkUpCiAgLSBNb2JpbGl0eSBjYWxjdWxhdGVkIGZyb20gYm9keSBtYXNzIGFuZCB0YXhvbm9taWMgZ3JvdXAgY2xhc3NpZmljYXRpb25zIG9mIG1vYmlsaXR5IG1vZGUgKGZseSwgcnVuLCBzd2ltLCBjcmF3bCwgc2Vzc2lsZSkuIEZseS9ydW4vc3dpbSBmb2xsb3dlZCB0aGUgYWxsb21ldHJpYyByZWxhdGlvbnNoaXAgaW4gSGlydCBldCBhbC4gMjAxNyBOYXQgRSZFLiBDcmF3bCBzZXQgYXQgMC4xIGttL2hyLCBzZXNzaWxlIHNldCB0byAwIGttL2hyLiBUaGVuIGNhbGN1bGF0ZWQgYXZlcmFnZWQgd2l0aGluIGVhY2ggYXNzZW1ibGFnZS4KICAtIEdlbmVyYXRpb24gdGltZSBjYWxjdWxhdGVkIGZyb20gYm9keSBtYXNzIGFuZCBlbmRvdGhlcm0gdnMuIGVjdG90aGVybSBjbGFzc2lmaWNhdGlvbnMsIGZvbGxvd2luZyBNY0NveSAmIEdpbGxvb2x5IDIwMDggRUxFLiBBdmVyYWdlZCBhY3Jvc3Mgc3BlY2llcyB3aXRoaW4gZWFjaCBhc3NlbWJsYWdlLiAKICAtIENvbnN1bWVyIHZzLiBwcm9kdWNlciBjbGFzc2lmaWNhdGlvbiBieSBzcGVjaWVzCiAgLSBFbmRvdGhlcm0gdnMuIGVjdG90aGVybSBjbGFzc2lmaWNhdGlvbiBieSBzcGVjaWVzCiAgLSBTcGVjaWVzIHJpY2huZXNzLCBjYWxjdWxhdGVkIGFzIHRoZSBudW1iZXIgb2Ygc3BlY2llcyBpbiB0aGUgYXNzZW1ibGFnZQogIC0gTmV0IHByaW1hcnkgcHJvZHVjdGl2aXR5IChOUFApIGZyb20gdGhlIG1lcmdlZCBsYW5kL29jZWFuIHByb2R1Y3QgcHJvZHVjZWQgYnkgdGhlIFtPY2VhbiBQcm9kdWN0aXZpdHldKGh0dHA6Ly93d3cuc2NpZW5jZS5vcmVnb25zdGF0ZS5lZHUvb2NlYW4ucHJvZHVjdGl2aXR5LykgZ3JvdXAgYXQgT3JlZ29uIFN0YXRlIHVzaW5nIG1ldGhvZHMgZnJvbSBaaGFvIGV0IGFsLiAyMDA1IGFuZCBCZWhyZW5mZWxkICYgRmFsa293c2tpIDE5OTcuIAogIC0gSHVtYW4gaW1wYWN0IGNhbGN1bGF0ZWQgZnJvbSBCb3dsZXIgZXQgYWwuIDIwMjAgKGFsc28gdHJ5IGRhdGEgZnJvbSBWZW50ZXIgZXQgYWwuIDIwMTYgYW5kIEhhbHBlcm4gZXQgYWwuIDIwMDgpCiAgLSBUaGVybWFsIGJpYXMgY2FsY3VsYXRlZCBmcm9tIFNwZWNpZXMgVGVtcGVyYXR1cmUgSW5kaWNlcyAoTWlrZSBCdXJyb3dzKQogIC0gVmVnZXRhdGlvbiBjb3ZlciBpbmRleCwgY2FsY3VsYXRlZCBmcm9tICV0cmVlIGNvdmVyIGFuZCAlbm9uLXRyZWUgdmVnIGNvdmVyIChsYXR0ZXIgY291bnRlZCBhcyAxLzIpLCBmcm9tIHZlZ2V0YXRpb24gY29udGludW91cyBmaWVsZHMgKFJ1YmVuIFJlbWVsZ2FkbykKLSBEaWZmZXJlbmNlcyBpbiB0ZW1wb3JhbCB0dXJub3ZlciAocmVzcG9uc2UgdmFyaWFibGUpIG1vZGVsZWQgd2l0aCBhIGxpbmVhciBtaXhlZCBlZmZlY3RzIG1vZGVsIChubG1lIHBhY2thZ2UsIGxtZSgpIGZ1bmN0aW9uKS4gU2VlIGJlbG93IGZvciBkZXRhaWxzLgoKYGBge3Igc2V0dXB9CmxpYnJhcnkoZGF0YS50YWJsZSkgIyBmb3IgaGFuZGxpbmcgbGFyZ2UgZGF0YXNldHMKbGlicmFyeShnZ3Bsb3QyKSAjIGZvciBzb21lIHBsb3R0aW5nCmxpYnJhcnkobmxtZSkgIyBmb3IgTUUgbW9kZWxzCmxpYnJhcnkobWFwcykgIyBmb3IgbWFwCmxpYnJhcnkoZ3JpZEV4dHJhKSAjIHRvIGNvbWJpbmUgZ2dwbG90cyB0b2dldGhlcgpsaWJyYXJ5KGdyaWQpICMgdG8gY29tYmluZSBnZ3Bsb3RzIHRvZ2V0aGVyCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KE1BU1MpICMgZm9yIHN0ZXBBSUMKbGlicmFyeShwaWVjZXdpc2VTRU0pICMgZm9yIHJzcXVhcmVkKCkgZm9yIG5sbWUgbW9kZWxzCgpvcHRpb25zKHdpZHRoPTUwMCkgIyB0dXJuIG9mZiBtb3N0IHRleHQgd3JhcHBpbmcKCiMgdGVsbCBSU3R1ZGlvIHRvIHVzZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5IGFzIHRoZSByb290IGZvciB0aGlzIG5vdGVib29rLiBOZWVkZWQgc2luY2Ugd2UgYXJlIHN0b3JpbmcgY29kZSBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeS4Ka25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBycHJvanJvb3Q6OmZpbmRfcnN0dWRpb19yb290X2ZpbGUoKSkgCmBgYAoKYGBge3IgbG9hZCBkYXRhfQojIFR1cm5vdmVyIGFuZCBjb3ZhcmlhdGVzIGFzc2VtYmxlZCBieSB0dXJub3Zlcl92c190ZW1wZXJhdHVyZV9wcmVwLlJtZAp0cmVuZHMgPC0gZnJlYWQoJ291dHB1dC90dXJub3Zlcl93X2NvdmFyaWF0ZXMuY3N2Lmd6JykKCiMgc2V0IHJlYWxtIG9yZGVyCnRyZW5kc1ssIFJFQUxNIDo9IGZhY3RvcihSRUFMTSwgbGV2ZWxzID0gYygnRnJlc2h3YXRlcicsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnKSwgb3JkZXJlZCA9IEZBTFNFKV0KCiMgc2V0IHVwIHNpZ24gb2YgdGVtcGVyYXR1cmUgY2hhbmdlCnRyZW5kc1ssIHRzaWduIDo9IGZhY3RvcihzaWduKHRlbXB0cmVuZCkpXQoKIyByZWFsbSB0aGF0IGNvbWJpbmVkIFRlcnJlc3RyaWFsIGFuZCBGcmVzaHdhdGVyLCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBodW1hbiBpbXBhY3QKdHJlbmRzWywgUkVBTE0yIDo9IFJFQUxNXQpsZXZlbHModHJlbmRzJFJFQUxNMikgPSBsaXN0KFRlcnJGcmVzaCA9ICJGcmVzaHdhdGVyIiwgVGVyckZyZXNoID0gIlRlcnJlc3RyaWFsIiwgTWFyaW5lID0gIk1hcmluZSIpCgojIGdyb3VwIE1hcmluZSBpbnZlcnRlYnJhdGVzL3BsYW50cyBpbiB3aXRoIEFsbAp0cmVuZHNbLCB0YXhhX21vZDIgOj0gdGF4YV9tb2RdCnRyZW5kc1t0YXhhX21vZCA9PSAnTWFyaW5lIGludmVydGVicmF0ZXMvcGxhbnRzJywgdGF4YV9tb2QyIDo9ICdBbGwnXQoKIyBjYWxjdWxhdGUgZHVyYXRpb24KdHJlbmRzWywgZHVyYXRpb24gOj0gbWF4eXJCVCAtIG1pbnlyQlQgKyAxXQoKIyB0cmltIHRvIGRhdGEgd2l0aCA+PSAzIHlycwp0cmVuZHMgPC0gdHJlbmRzW255ckJUID49IDMsIF0KYGBgCgoKIyMjIExvZy10cmFuc2Zvcm0gc29tZSB2YXJpYWJsZXMsIHRoZW4gY2VudGVyIGFuZCBzY2FsZS4gCmBgYCB7ciBjZW50ZXIgYW5kIHNjYWxlfQp0cmVuZHNbLCB0ZW1wYXZlLnNjIDo9IHNjYWxlKHRlbXBhdmUpXQp0cmVuZHNbLCB0ZW1wYXZlX21ldGFiLnNjIDo9IHNjYWxlKHRlbXBhdmVfbWV0YWIpXQp0cmVuZHNbLCBzZWFzLnNjIDo9IHNjYWxlKHNlYXMpXQp0cmVuZHNbLCBtaWNyb2NsaW0uc2MgOj0gc2NhbGUobG9nKG1pY3JvY2xpbSkpXQp0cmVuZHNbLCB0ZW1wdHJlbmQuc2MgOj0gc2NhbGUodGVtcHRyZW5kLCBjZW50ZXIgPSBGQUxTRSldICMgZG8gbm90IGNlbnRlcgp0cmVuZHNbLCB0ZW1wdHJlbmRfYWJzLnNjIDo9IHNjYWxlKGFicyh0ZW1wdHJlbmQpLCBjZW50ZXIgPSBGQUxTRSldICMgZG8gbm90IGNlbnRlciwgc28gdGhhdCAwIGlzIHN0aWxsIDAgdGVtcGVyYXR1cmUgY2hhbmdlCnRyZW5kc1ssIG1hc3Muc2MgOj0gc2NhbGUobG9nKG1hc3NfbWVhbl93ZWlnaHQpKV0KdHJlbmRzWywgc3BlZWQuc2MgOj0gc2NhbGUobG9nKHNwZWVkX21lYW5fd2VpZ2h0KzEpKV0KdHJlbmRzWywgbGlmZXNwYW4uc2MgOj0gc2NhbGUobG9nKGxpZmVzcGFuX21lYW5fd2VpZ2h0KSldCnRyZW5kc1ssIGNvbnN1bWVyZnJhYy5zYyA6PSBzY2FsZShjb25zZnJhYyldCnRyZW5kc1ssIGVuZG90aGVybWZyYWMuc2MgOj0gc2NhbGUoZW5kb2ZyYWMpXQp0cmVuZHNbLCBuc3BwLnNjIDo9IHNjYWxlKGxvZyhOc3BwKSldCnRyZW5kc1ssIHRoZXJtYWxfYmlhcy5zYyA6PSBzY2FsZSh0aGVybWFsX2JpYXMpXQp0cmVuZHNbLCBucHAuc2MgOj0gc2NhbGUobG9nKG5wcCkpXQp0cmVuZHNbLCB2ZWcuc2MgOj0gc2NhbGUobG9nKHZlZysxKSldCnRyZW5kc1ssIGR1cmF0aW9uLnNjIDo9IHNjYWxlKGxvZyhkdXJhdGlvbikpXQp0cmVuZHNbLCBodW1hbl9ib3dsZXIuc2MgOj0gc2NhbGUobG9nKGh1bWFuX2Jvd2xlcisxKSksIGJ5ID0gUkVBTE0yXSAjIHNlcGFyYXRlIHNjYWxpbmcgYnkgcmVhbG0KdHJlbmRzW1JFQUxNMiA9PSAnVGVyckZyZXNoJywgaHVtYW5fZm9vdHByaW50LnNjIDo9IHNjYWxlKGxvZyhodW1hbl92ZW50ZXIrMSkpXQp0cmVuZHNbUkVBTE0yID09ICdNYXJpbmUnLCBodW1hbl9mb290cHJpbnQuc2MgOj0gc2NhbGUobG9nKGh1bWFuX2hhbHBlcm4pKV0KYGBgCgojIyMgRXhhbWluZSBob3cgbWFueSBkYXRhIHBvaW50cyBhcmUgYXZhaWxhYmxlCkp1c3QgdHVybm92ZXIKYGBge3Igc2FtcGxlIHNpemUgYWxsfQpjYXQoJ092ZXJhbGwgIyB0aW1lLXNlcmllczogJywgbnJvdyh0cmVuZHMpLCAnXG4nKQpjYXQoJyMgc3R1ZGllczogJywgdHJlbmRzWywgbGVuZ3RoKHVuaXF1ZShTVFVEWV9JRCkpXSwgJ1xuJykKY2F0KCdEYXRhIHBvaW50czogJywgdHJlbmRzWywgc3VtKG55ckJUKV0sICdcbicpCnRyZW5kc1ssIHRhYmxlKFJFQUxNKV0KdHJlbmRzWywgdGFibGUodGF4YV9tb2QpXQp0cmVuZHNbLCB0YWJsZSh0YXhhX21vZCwgUkVBTE0pXQpgYGAKCldpdGggYWxsIGNvdmFyaWF0ZXMgKEJvd2xlciBmb3IgaHVtYW4pCmBgYHtyIHNhbXBsZSBzaXplIGZvciBKYWNjYXJkIHR1cm5vdmVyfQojIHRoZSBjYXNlcyB3ZSBjYW4gY29tcGFyZQphcHBseSh0cmVuZHNbLCAuKEp0dXRyZW5kcmVtMCwgUkVBTE0sIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgdGVtcHRyZW5kLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIHZlZy5zYywgaHVtYW5fYm93bGVyLnNjKV0sIE1BUkdJTiA9IDIsIEZVTiA9IGZ1bmN0aW9uKHgpIHN1bSghaXMubmEoeCkpKQppIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kcmVtMCwgdGVtcGF2ZS5zYywgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCB0ZW1wdHJlbmQuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBsaWZlc3Bhbi5zYywgY29uc3VtZXJmcmFjLnNjLCBlbmRvdGhlcm1mcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgdmVnLnNjLCBodW1hbl9ib3dsZXIuc2MpXQpjYXQoJ092ZXJhbGwgIyB0aW1lLXNlcmllczogJywgc3VtKGkpLCAnXG4nKQpjYXQoJyMgc3R1ZGllczogJywgdHJlbmRzW2ksIGxlbmd0aCh1bmlxdWUoU1RVRFlfSUQpKV0sICdcbicpCmNhdCgnRGF0YSBwb2ludHM6ICcsIHRyZW5kc1tpLCBzdW0obnlyQlQpXSwgJ1xuJykKdHJlbmRzW2ksIHRhYmxlKFJFQUxNKV0KdHJlbmRzW2ksIHRhYmxlKHRheGFfbW9kKV0KdHJlbmRzW2ksIHRhYmxlKHRheGFfbW9kLCBSRUFMTSldCmBgYAoKIyMjIENob29zZSB0aGUgdmFyaWFuY2Ugc3RydWN0dXJlIGZvciBtaXhlZCBlZmZlY3RzIG1vZGVscwpUcnkgY29tYmluYXRpb25zIG9mCgotIHZhcmlhbmNlIHNjYWxlZCB0byBhIHBvd2VyIG9mIHRoZSBudW1iZXIgb2YgeWVhcnMgaW4gdGhlIGNvbW11bml0eSB0aW1lLXNlcmllcwotIHZhcmlhbmNlIHNjYWxlZCB0byBhIHBvd2VyIG9mIHRoZSBhYnMgdGVtcGVyYXR1cmUgdHJlbmQKLSByYW5kb20gaW50ZXJjZXB0IGZvciB0YXhhX21vZAotIHJhbmRvbSBpbnRlcmNlcHQgZm9yIFNUVURZX0lECi0gcmFuZG9tIHNsb3BlIChhYnMgdGVtcGVyYXR1cmUgdHJlbmQpIGZvciB0YXhhX21vZAotIHJhbmRvbSBzbG9wZSAoYWJzIHRlbXBlcmF0dXJlIHRyZW5kKSBmb3IgU1RVRFlfSUQKLSByYW5kb20gaW50ZXJjZXB0IGZvciByYXJlZnlJRCAoZm9yIG92ZXJkaXNwZXJzaW9uKQoKQW5kIGNob29zZSB0aGUgb25lIHdpdGggbG93ZXN0IEFJQyAobm90IHJ1bjogdGFrZXMgYSBsb25nIHRpbWUpCmBgYHtyIGNob29zZSB2YXJpYW5jZSBzdHJ1Y3R1cmUgZm9yIEphY2FyZCB0dXJub3ZlciwgZXZhbCA9IEZBTFNFfQojIGZpdCBtb2RlbHMgZm9yIHZhcmlhbmNlIHN0cnVjdHVyZQpmaXhlZCA8LSBmb3JtdWxhKEp0dXRyZW5kcmVtMCB+IHRlbXB0cmVuZF9hYnMuc2MqUkVBTE0gKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmR1cmF0aW9uLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yKQppIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kcmVtMCwgdGVtcHRyZW5kX2Ficy5zYywgUkVBTE0sIHRzaWduLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb2NsaW0uc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIHZlZy5zYywgaHVtYW5fYm93bGVyLnNjKV0KbW9kcyA8LSB2ZWN0b3IoJ2xpc3QnLCAwKQptb2RzW1sxXV0gPC0gZ2xzKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSkKbW9kc1tbMl1dIDwtIGdscyhmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1szXV0gPC0gZ2xzKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgd2VpZ2h0cyA9IHZhclBvd2VyKDAuNSwgfnRlbXB0cmVuZF9hYnMuc2MpKQoKbW9kc1tbNF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMiwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzVdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXxTVFVEWV9JRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzZdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXx0YXhhX21vZDIvU1RVRFlfSUQsIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICJvcHRpbSIpKQptb2RzW1s3XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8U1RVRFlfSUQvcmFyZWZ5SUQsIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICJvcHRpbSIpKQptb2RzW1s4XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8dGF4YV9tb2QyL1NUVURZX0lEL3JhcmVmeUlELCBjb250cm9sID0gbG1lQ29udHJvbChvcHQgPSAib3B0aW0iKSkKCm1vZHNbWzldXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+dGVtcHRyZW5kX2Ficy5zYyB8IHRheGFfbW9kKQptb2RzW1sxMF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpKSAjIGluY2x1ZGVzIG92ZXJkaXNwZXJzaW9uLiBuZXcgZm9ybXVsYSBzbyB0aGF0IHJhbmRvbSBzbG9wZSBpcyBvbmx5IGZvciBzdHVkeSBsZXZlbCAobm90IGVub3VnaCBkYXRhIHRvIGV4dGVuZCB0byByYXJlZnlJRCkuCgptb2RzW1sxMV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMTJdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IDEsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKCmFpY3MgPC0gc2FwcGx5KG1vZHMsIEFJQykKbWluYWljcyA8LSBhaWNzIC0gbWluKGFpY3MpCm1pbmFpY3MKd2hpY2gubWluKGFpY3MpCmBgYApDaG9vc2VzIHRoZSByYW5kb20gc2xvcGVzICh0ZW1wdHJlbmRfYWJzKSAmIGludGVyY2VwdHMgZm9yIFNUVURZX0lELCBvdmVyZGlzcGVyc2lvbiwgYW5kIHZhcmlhbmNlIHNjYWxlZCB0byBudW1iZXIgb2YgeWVhcnMuCldlIGhhdmVuJ3QgZGVhbHQgd2l0aCBwb3RlbnRpYWwgdGVzdGluZyBvbiB0aGUgYm91bmRhcnkgaXNzdWVzIGhlcmUgeWV0LgoKIyBSZXN1bHRzCiMjIFdoZXJlIGRvIHdlIGhhdmUgZGF0YT8KYGBge3IgbWFwfQp3b3JsZCA8LSBtYXBfZGF0YSgnd29ybGQnKQpnZ3Bsb3Qod29ybGQsIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCkpICsKICAgIGdlb21fcG9seWdvbihmaWxsID0gJ2xpZ2h0Z3JheScsIGNvbG9yID0gJ3doaXRlJykgKwogICAgZ2VvbV9wb2ludChkYXRhID0gdHJlbmRzLCBhZXMocmFyZWZ5SURfeCwgcmFyZWZ5SURfeSwgZ3JvdXAgPSBSRUFMTSwgY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjUsIGFscGhhID0gMC40KSAgKwogICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiLCBuYW1lID0gJ1JlYWxtJykgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIGxlZ2VuZC5rZXk9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNiksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0yMCkpICsKICBsYWJzKHggPSAnTG9uZ2l0dWRlICjCsCknLCB5ID0gJ0xhdGl0dWRlICjCsCknKQpgYGAKCk1vc3RseSBub3J0aGVybiBoZW1pc3BoZXJlLCBidXQgc3ByZWFkIGFsbCBvdmVyLiBOb3Qgc28gbXVjaCBpbiBBZnJpY2Egb3IgbXVjaCBvZiBBc2lhLgoKCgoKIyNBdmVyYWdlIHJhdGVzIG9mIHR1cm5vdmVyICh3aXRob3V0IHllYXIgMSkKYGBge3IgcmF0ZXMgb2YgdHVybm92ZXIgcmVtMH0KdHJlbmRzW2Ficyh0ZW1wdHJlbmQpID49IDAuNSwgdGVtcHRyZW5kdGV4dDEgOj0gJ0NoYW5naW5nJ10KdHJlbmRzW2Ficyh0ZW1wdHJlbmQpIDw9IDAuMDUsIHRlbXB0cmVuZHRleHQxIDo9ICdTdGFibGUnXQp0cmVuZHNbdGVtcHRyZW5kIDw9IC0wLjUsIHRlbXB0cmVuZHRleHQyIDo9ICdDb29saW5nJ10KdHJlbmRzW2Ficyh0ZW1wdHJlbmQpIDw9IDAuMDUsIHRlbXB0cmVuZHRleHQyIDo9ICdTdGFibGUnXQp0cmVuZHNbdGVtcHRyZW5kID49IDAuNSwgdGVtcHRyZW5kdGV4dDIgOj0gJ1dhcm1pbmcnXQoKdHJlbmRzdW0xIDwtIHRyZW5kc1shaXMubmEodGVtcHRyZW5kdGV4dDEpLCAKICAgICAgICAgICAgICAgICAgICAuKHR5cGUgPSAnSnR1JywgCiAgICAgICAgICAgICAgICAgICAgICBhdmUgPSBtZWFuKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgc2UgPSBzZChKdHV0cmVuZHJlbTAsIG5hLnJtPVRSVUUpL3NxcnQoLk4pLAogICAgICAgICAgICAgICAgICAgICAgbiA9IHN1bSghaXMubmEoSnR1dHJlbmRyZW0wKSkpLAogICAgICAgICAgICAgICAgICAgIGJ5ID0gdGVtcHRyZW5kdGV4dDFdICMgdHVybm92ZXIgcGVyIHllYXIgZm9yIGxvY2F0aW9ucyBjaGFuZ2luZyB0ZW1wZXJhdHVyZQp0cmVuZHN1bTEgPC0gcmJpbmQodHJlbmRzdW0xLCB0cmVuZHNbIWlzLm5hKHRlbXB0cmVuZHRleHQxKSwgCiAgICAgICAgICAgICAgICAgICAgLih0eXBlID0gJ0piZXRhJywgCiAgICAgICAgICAgICAgICAgICAgICBhdmUgPSBtZWFuKEpiZXRhdHJlbmRyZW0wLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICBzZSA9IHNkKEpiZXRhdHJlbmRyZW0wLCBuYS5ybT1UUlVFKS9zcXJ0KC5OKSwKICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdW0oIWlzLm5hKEpiZXRhdHJlbmRyZW0wKSkpLAogICAgICAgICAgICAgICAgICAgIGJ5ID0gdGVtcHRyZW5kdGV4dDFdKQp0cmVuZHN1bTEgPC0gcmJpbmQodHJlbmRzdW0xLCB0cmVuZHNbIWlzLm5hKHRlbXB0cmVuZHRleHQxKSwgCiAgICAgICAgICAgICAgICAgICAgLih0eXBlID0gJ0hvcm4nLCAKICAgICAgICAgICAgICAgICAgICAgIGF2ZSA9IG1lYW4oSG9ybnRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgc2UgPSBzZChIb3JudHJlbmRyZW0wLCBuYS5ybT1UUlVFKS9zcXJ0KC5OKSwKICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdW0oIWlzLm5hKEhvcm50cmVuZHJlbTApKSksCiAgICAgICAgICAgICAgICAgICAgYnkgPSB0ZW1wdHJlbmR0ZXh0MV0pCgp0cmVuZHN1bTIgPC0gdHJlbmRzWyFpcy5uYSh0ZW1wdHJlbmR0ZXh0MiksIAogICAgICAgICAgICAgICAgICAgIC4odHlwZSA9ICdKdHUnLCAKICAgICAgICAgICAgICAgICAgICAgIGF2ZSA9IG1lYW4oSnR1dHJlbmRyZW0wLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICBzZSA9IHNkKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSkvc3FydCguTiksCiAgICAgICAgICAgICAgICAgICAgICBuID0gc3VtKCFpcy5uYShKdHV0cmVuZHJlbTApKSksCiAgICAgICAgICAgICAgICAgICAgYnkgPSB0ZW1wdHJlbmR0ZXh0Ml0gIyB0dXJub3ZlciBwZXIgeWVhciBmb3IgbG9jYXRpb25zIGNoYW5naW5nIHRlbXBlcmF0dXJlIChpbmMuIGRpcmVjdGlvbikKdHJlbmRzdW0yIDwtIHJiaW5kKHRyZW5kc3VtMiwgdHJlbmRzWyFpcy5uYSh0ZW1wdHJlbmR0ZXh0MiksIAogICAgICAgICAgICAgICAgICAgIC4odHlwZSA9ICdKYmV0YScsIAogICAgICAgICAgICAgICAgICAgICAgYXZlID0gbWVhbihKYmV0YXRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgc2UgPSBzZChKYmV0YXRyZW5kcmVtMCwgbmEucm09VFJVRSkvc3FydCguTiksCiAgICAgICAgICAgICAgICAgICAgICBuID0gc3VtKCFpcy5uYShKYmV0YXRyZW5kcmVtMCkpKSwKICAgICAgICAgICAgICAgICAgICBieSA9IHRlbXB0cmVuZHRleHQyXSkKdHJlbmRzdW0yIDwtIHJiaW5kKHRyZW5kc3VtMiwgdHJlbmRzWyFpcy5uYSh0ZW1wdHJlbmR0ZXh0MiksIAogICAgICAgICAgICAgICAgICAgIC4odHlwZSA9ICdIb3JuJywgCiAgICAgICAgICAgICAgICAgICAgICBhdmUgPSBtZWFuKEhvcm50cmVuZHJlbTAsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIHNlID0gc2QoSG9ybnRyZW5kcmVtMCwgbmEucm09VFJVRSkvc3FydCguTiksCiAgICAgICAgICAgICAgICAgICAgICBuID0gc3VtKCFpcy5uYShIb3JudHJlbmRyZW0wKSkpLAogICAgICAgICAgICAgICAgICAgIGJ5ID0gdGVtcHRyZW5kdGV4dDJdKQoKCgp0cmVuZHN1bTEKdHJlbmRzdW0yCmBgYAoKIyMjIFBsb3RzIG9mIHR1cm5vdmVyIHJhdGVzCmBgYHtyIHR1cm5vdmVyIHZzLiB0ZW1wZXJhdHVyZSB2aW9saW4gcGxvdH0KcDEgPC0gZ2dwbG90KHRyZW5kc1shaXMubmEodGVtcHRyZW5kdGV4dDEpLCBdLCBhZXModGVtcHRyZW5kdGV4dDEsIEhvcm50cmVuZHJlbTApKSArCiAgZ2VvbV92aW9saW4oZHJhd19xdWFudGlsZXMgPSBjKDAuMjUsIDAuNSwgMC43NSksIGZpbGwgPSAnZ3JleScpICsKICBsYWJzKHggPSAnJywgeSA9ICdUdXJub3ZlcicsIHRhZyA9ICdBJywgdGl0bGUgPSAnUmF0ZSBvZiB0ZW1wZXJhdHVyZSBjaGFuZ2UnKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgbGVnZW5kLmtleT1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTgpLAogICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTApKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAwKQoKcDIgPC0gZ2dwbG90KHRyZW5kc1shaXMubmEodGVtcHRyZW5kdGV4dDIpLCBdLCBhZXModGVtcHRyZW5kdGV4dDIsIEhvcm50cmVuZHJlbTApKSArCiAgZ2VvbV92aW9saW4oZHJhd19xdWFudGlsZXMgPSBjKDAuMjUsIDAuNSwgMC43NSksIGZpbGwgPSAnZ3JleScpICsKICBsYWJzKHggPSAnJywgeSA9ICdUdXJub3ZlcicsIHRhZyA9ICdBJywgdGl0bGUgPSAnUmF0ZSBvZiB0ZW1wZXJhdHVyZSBjaGFuZ2UnKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgbGVnZW5kLmtleT1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTgpLAogICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTApKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAwKQoKcDMgPC0gZ2dwbG90KHRyZW5kc3VtMSwgYWVzKHRlbXB0cmVuZHRleHQxLCBhdmUsIGdyb3VwID0gdHlwZSwgY29sb3IgPSB0eXBlKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuMjUpLCBzaXplID0gMC41KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1hdmUtc2UsIHltYXg9YXZlK3NlKSwgd2lkdGg9LjEsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjI1KSkgKwogIGxhYnMoeCA9ICcnLCB5ID0gJ1RlbXBvcmFsIHR1cm5vdmVyJywgdGl0bGUgPSAnSmFjY2FyZCB0dXJub3ZlcicpICsKICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAwLCBzbG9wZSA9IDAsIGxpbmV0eXBlID0gJ2Rhc2hlZCcpICsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBsZWdlbmQua2V5PWVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9OCksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMCkpICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwwLjA0KSkKCnA0IDwtIGdncGxvdCh0cmVuZHN1bTIsIGFlcyh0ZW1wdHJlbmR0ZXh0MiwgYXZlLCBncm91cCA9IHR5cGUsIGNvbG9yID0gdHlwZSkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjI1KSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49YXZlLXNlLCB5bWF4PWF2ZStzZSksIHdpZHRoPS4xLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC4yNSkpICsKICBsYWJzKHggPSAnJywgeSA9ICdUZW1wb3JhbCB0dXJub3ZlcicsIHRpdGxlID0gJ0phY2NhcmQgdHVybm92ZXInKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAwLCBsaW5ldHlwZSA9ICdkYXNoZWQnKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgbGVnZW5kLmtleT1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTgpLAogICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTApKQoKZ3JpZC5hcnJhbmdlKHAxLCBwMiwgcDMsIHA0LCBuY29sID0gMikKYGBgCgojIyBUZW1wZXJhdHVyZS1vbmx5IG1vZGVsIChKdHV0cmVuZCwgSmJldGF0cmVuZCwgSG9ybnRyZW5kKQpgYGB7ciBMTUUgdGVtcGVyYXR1cmUgb25seSByZW0wfQppNCA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhKdHV0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wdHJlbmQpXQoKcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IGFicyh0ZW1wdHJlbmQpLCByYXJlZnlJRCA9IH4xKQp2YXJlZiA8LSB2YXJQb3dlcigtMC41LCB+bnlyQlQpCgppZihmaWxlLmV4aXN0cygndGVtcC9tb2Rvbmx5VHRyZW5kcmVtMC5yZHMnKSl7CiAgbW9kb25seVR0cmVuZHJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2Rvbmx5VHRyZW5kcmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZG9ubHlUdHJlbmRyZW0wIDwtIGxtZShKdHV0cmVuZHJlbTAgfiBhYnModGVtcHRyZW5kKSpSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2k0LF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZG9ubHlUdHJlbmRyZW0wLCBmaWxlID0gJ3RlbXAvbW9kb25seVR0cmVuZHJlbTAucmRzJykKfQoKaTUgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wdHJlbmQpXQppZihmaWxlLmV4aXN0cygndGVtcC9tb2Rvbmx5VHRyZW5kSmJldGFyZW0wLnJkcycpKXsKICBtb2Rvbmx5VHRyZW5kSmJldGFyZW0wIDwtIHJlYWRSRFMoJ3RlbXAvbW9kb25seVR0cmVuZEpiZXRhcmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZG9ubHlUdHJlbmRKYmV0YXJlbTAgPC0gbG1lKEpiZXRhdHJlbmRyZW0wIH4gYWJzKHRlbXB0cmVuZCkqUkVBTE0sCiAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpNSxdLCBtZXRob2QgPSAnUkVNTCcsIAogICAgICAgICAgICAgICAgICAgY29udHJvbD1sbWVDb250cm9sKG1zTWF4SXRlciA9IDEwMCwgbWF4SXRlciA9IDEwMCkpCiAgc2F2ZVJEUyhtb2Rvbmx5VHRyZW5kSmJldGFyZW0wLCBmaWxlID0gJ3RlbXAvbW9kb25seVR0cmVuZEpiZXRhcmVtMC5yZHMnKQp9CgppNiA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhIb3JudHJlbmRyZW0wLCBSRUFMTSwgdGVtcHRyZW5kKV0KaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kb25seVR0cmVuZEhvcm5yZW0wLnJkcycpKXsKICBtb2Rvbmx5VHRyZW5kSG9ybnJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2Rvbmx5VHRyZW5kSG9ybnJlbTAucmRzJykKfSBlbHNlIHsKICBtb2Rvbmx5VHRyZW5kSG9ybnJlbTAgPC0gbG1lKEhvcm50cmVuZHJlbTAgfiBhYnModGVtcHRyZW5kKSpSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2k2LF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZG9ubHlUdHJlbmRIb3JucmVtMCwgZmlsZSA9ICd0ZW1wL21vZG9ubHlUdHJlbmRIb3JucmVtMC5yZHMnKQp9CgpzdW1tYXJ5KG1vZG9ubHlUdHJlbmRyZW0wKQpzdW1tYXJ5KG1vZG9ubHlUdHJlbmRKYmV0YXJlbTApCnN1bW1hcnkobW9kb25seVR0cmVuZEhvcm5yZW0wKQoKCmBgYAoKCiMjIyBQbG90IHRoZSB0ZW1wLW9ubHkgY29lZmZpY2llbnRzCmBgYHtyIG1vZG9ubHlUdHJlbmRzaW1wIGNvZWZzfQpjb2xvcnMgPC0gYnJld2VyLnBhbCgzLCAnRGFyazInKQoKIyBtYWtlIHRhYmxlIG9mIGNvZWZmaWNpZW50cwpjb2VmczEgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KG1vZG9ubHlUdHJlbmRyZW0wKSR0VGFibGUpCmNvZWZzMiA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkobW9kb25seVR0cmVuZEpiZXRhcmVtMCkkdFRhYmxlKQpjb2VmczMgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KG1vZG9ubHlUdHJlbmRIb3JucmVtMCkkdFRhYmxlKQpjb2VmczEkbW9kIDwtICdKdHUnCmNvZWZzMiRtb2QgPC0gJ0piZXRhJwpjb2VmczMkbW9kIDwtICdIb3JuJwpyb3dzMSA8LSB3aGljaChncmVwbCgndGVtcHRyZW5kJywgcm93bmFtZXMoY29lZnMxKSkpICMgZXh0cmFjdCB0ZW1wZXJhdHVyZSBlZmZlY3QKY29scyA8LSBjKCdWYWx1ZScsICdTdGQuRXJyb3InLCAnbW9kJykKYWxsY29lZnMgPC0gcmJpbmQoY29lZnMxW3Jvd3MxLCBjb2xzXSwgY29lZnMyW3Jvd3MxLCBjb2xzXSwgY29lZnMzW3Jvd3MxLCBjb2xzXSkKYWxsY29lZnMkVmFsdWVbZ3JlcGwoJ1JFQUxNTWFyaW5lJywgcm93bmFtZXMoYWxsY29lZnMpKV0gPC0gCiAgYWxsY29lZnMkVmFsdWVbZ3JlcGwoJ1JFQUxNTWFyaW5lJywgcm93bmFtZXMoYWxsY29lZnMpKV0gKyAKICBhbGxjb2VmcyRWYWx1ZVshZ3JlcGwoJ1JFQUxNJywgcm93bmFtZXMoYWxsY29lZnMpKV0gIyBhZGQgaW50ZXJjZXB0IHRvIG1hcmluZSBlZmZlY3RzCmFsbGNvZWZzJFZhbHVlW2dyZXBsKCdSRUFMTVRlcnJlc3RyaWFsJywgcm93bmFtZXMoYWxsY29lZnMpKV0gPC0gCiAgYWxsY29lZnMkVmFsdWVbZ3JlcGwoJ1JFQUxNVGVycmVzdHJpYWwnLCByb3duYW1lcyhhbGxjb2VmcykpXSArIAogIGFsbGNvZWZzJFZhbHVlWyFncmVwbCgnUkVBTE0nLCByb3duYW1lcyhhbGxjb2VmcykpXSAjIGFkZCBpbnRlcmNlcHQgdG8gdGVycmVzdHJpYWwgZWZmZWN0cwoKYWxsY29lZnMkbENJIDwtIGFsbGNvZWZzJFZhbHVlIC0gYWxsY29lZnMkU3RkLkVycm9yICMgbG93ZXIgY29uZmlkZW5jZSBpbnRlcnZhbAphbGxjb2VmcyR1Q0kgPC0gYWxsY29lZnMkVmFsdWUgKyBhbGxjb2VmcyRTdGQuRXJyb3IKYWxsY29lZnMkeSA8LSBjKDMsIDIsIDEpICsgcmVwKGMoMCwgLTAuMSwgLTAuMiksIGMoMywgMywgMykpICMgeS12YWx1ZXMKYWxsY29lZnMkY29sIDwtIGMocmVwKGNvbG9yc1sxXSwgMyksIHJlcChjb2xvcnNbMl0sIDMpLCByZXAoY29sb3JzWzNdLCAzKSkKYWxsY29lZnMkcmVhbG0gPC0gcmVwKGMoJ0ZyZXNod2F0ZXInLCAnTWFyaW5lJywgJ1RlcnJlc3RyaWFsJyksIDMpCgpwYXIobGFzID0gMSwgbWFpID0gYygwLjgsIDIsIDAuMSwgMC4xKSkKcGxvdCgwLDAsIGNvbCA9ICd3aGl0ZScsIHhsaW09YygtMC4xLCAwLjg1KSwgeWxpbSA9IGMoMC41LDMpLCAKICAgICB5YXh0PSduJywgeGxhYiA9ICdUdXJub3ZlciBwZXIgfMKwQy95cnwnLCB5bGFiID0nJykKYXhpcygyLCBhdCA9IDM6MSwgbGFiZWxzID0gYygnRnJlc2h3YXRlcicsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnKSwgY2V4LmF4aXMgPSAwLjcpCmFibGluZSh2ID0gMCwgY29sID0gJ2dyZXknKQpmb3IoaSBpbiAxOm5yb3coYWxsY29lZnMpKXsKICB3aXRoKGFsbGNvZWZzW2ksIF0sIHBvaW50cyhWYWx1ZSwgeSwgcGNoID0gMTYsIGNvbCA9IGNvbCkpCiAgd2l0aChhbGxjb2Vmc1tpLCBdLCBsaW5lcyh4ID0gYyhsQ0ksIHVDSSksIHkgPSBjKHksIHkpLCBjb2wgPSBjb2wpKQp9CmxlZ2VuZCgnYm90dG9tcmlnaHQnLCBjb2wgPSBjb2xvcnMsIGx3ZCA9IDEsIHBjaCA9IDE2LCAKICAgICAgIGxlZ2VuZCA9IGMoJ0phY2NhcmQgdHVybm92ZXInLCAnSmFjY2FyZCB0b3RhbCcsICdIb3JuLU1vcmlzaXRhJywKICAgICAgICAgICAgICAgICAgJ0phY2NhcmQgdHVybm92ZXIgcmVtMCcsICdKYWNjYXJkIHRvdGFsIHJlbTAnLCAnSG9ybi1Nb3Jpc2l0YSByZW0wJykpCgpgYGAKCiMjIEZ1bGwgbW9kZWxzClRyeSBzdGF0aWMgY292YXJpYXRlcyBwbHVzIGludGVyYWN0aW9ucyBvZiBhYnMgdGVtcGVyYXR1cmUgdHJlbmQgd2l0aCBlYWNoIGNvdmFyaWF0ZToKCi0gcmVhbG0KLSBzcGVlZAotIG1hc3MKLSBhdmVyYWdlIG1ldGFib2xpYyB0ZW1wZXJhdHVyZQotIGNvbnN1bWVyIGZyYWN0aW9uCi0gZW52aXJvbm1lbnRhbCB0ZW1wZXJhdHVyZQotIHNlYXNvbmFsaXR5Ci0gbWljcm9jbGltYXRlcwotIHRoZXJtYWwgYmlhcwotIE5QUAotIHZlZ2V0YXRpb24KLSBkdXJhdGlvbgotIGh1bWFuIGZvb3RwcmludAoKRXhjZXB0IGZvciB0aGVybWFsIGJpYXM6IGludGVyYWN0IHdpdGggdGVtcGVyYXR1cmUgdHJlbmQgKG5vdCBhYnMpCgojIyMgRml0L2xvYWQgZnVsbCBtb2RlbHMKIyMjIyBCb3dsZXIgdnMgVmVudGVyL0hhbHBlcm4gaHVtYW4gaW1wYWN0CkJvd2xlciBoYXMgbG93ZXIgQUlDLgpgYGB7ciBMTUUgSmFjYXJkIHR1cm5vdmVyIHRlbXBlcmF0dXJlIGZ1bGwgcmVtMH0KIyB1c2luZyBCb3dsZXIgZm9yIGh1bWFuIGltcGFjdAppMSA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhKdHV0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWcuc2MsIGR1cmF0aW9uLnNjLCBodW1hbl9ib3dsZXIuc2MsIGh1bWFuX2Zvb3RwcmludC5zYyldCgpyYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxib3dsZXJyZW0wLnJkcycpKXsKICBtb2RUZnVsbGJvd2xlcnJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbGJvd2xlcnJlbTAucmRzJykKfSBlbHNlIHsKCm1vZFRmdWxsYm93bGVycmVtMCA8LSBsbWUoSnR1dHJlbmRyZW0wIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdHNpZ24gKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnNwcC5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnZlZy5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZHVyYXRpb24uc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTIsCiAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMSxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbGJvd2xlcnJlbTAsIGZpbGUgPSAndGVtcC9tb2RUZnVsbGJvd2xlcnJlbTAucmRzJykKfQoKIyB1c2luZyBWZW50ZXIvSGFscGVybiBmb3IgaHVtYW4gaW1wYWN0CmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsZm9vdHByaW50cmVtMC5yZHMnKSl7CiAgbW9kVGZ1bGxmb290cHJpbnRyZW0wIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxmb290cHJpbnRyZW0wLnJkcycpCn0gZWxzZSB7Cm1vZFRmdWxsZm9vdHByaW50cmVtMCA8LSBsbWUoSnR1dHJlbmRyZW0wIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmR1cmF0aW9uLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9mb290cHJpbnQuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTEsXSwgbWV0aG9kID0gJ1JFTUwnLAogICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxtZUNvbnRyb2wobWF4SXRlciA9IDEwMCwgbXNNYXhJdGVyID0gMTAwLCBuaXRlckVNID0gNTAsIG1zTWF4RXZhbCA9IDUwMCkpCiAgc2F2ZVJEUyhtb2RUZnVsbGZvb3RwcmludHJlbTAsIGZpbGUgPSAndGVtcC9tb2RUZnVsbGZvb3RwcmludHJlbTAucmRzJykKCn0KQUlDKG1vZFRmdWxsYm93bGVycmVtMCwgbW9kVGZ1bGxmb290cHJpbnRyZW0wKQoKYGBgCgojIyMjIEZ1bGwgbW9kZWxzCmBgYHtyIExNRSBKYWNhcmQgdG90YWwgYW5kIE1IIG1vZGVscyByZW0wLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9OH0KaTEgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmRyZW0wLCBSRUFMTSwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVnLnNjLCBkdXJhdGlvbi5zYywgaHVtYW5fYm93bGVyLnNjKV0KaTIgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWcuc2MsIGR1cmF0aW9uLnNjLCBodW1hbl9ib3dsZXIuc2MpXQppMyA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhIb3JudHJlbmRyZW0wLCBSRUFMTSwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVnLnNjLCBkdXJhdGlvbi5zYywgaHVtYW5fYm93bGVyLnNjKV0KCnJhbmRlZiA8LSBsaXN0KFNUVURZX0lEID0gfiB0ZW1wdHJlbmRfYWJzLnNjLCByYXJlZnlJRCA9IH4xKQp2YXJlZiA8LSB2YXJQb3dlcigtMC41LCB+bnlyQlQpCgojIGZ1bGwgbW9kZWxzCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsSnR1cmVtMC5yZHMnKSl7CiAgbW9kVGZ1bGxKdHVyZW0wIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxKdHVyZW0wLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxKdHVyZW0wIDwtIGxtZShKdHV0cmVuZHJlbTAgfiB0ZW1wdHJlbmRfYWJzLnNjKlJFQUxNICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypkdXJhdGlvbi5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTIsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTIsXSwgbWV0aG9kID0gJ1JFTUwnKQogIHNhdmVSRFMobW9kVGZ1bGxKdHVyZW0wLCBmaWxlID0gJ3RlbXAvbW9kVGZ1bGxKdHVyZW0wLnJkcycpCn0KCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsSmJldGFyZW0wLnJkcycpKXsKICBtb2RUZnVsbEpiZXRhcmVtMCA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsSmJldGFyZW0wLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxKYmV0YXJlbTAgPC0gbG1lKEpiZXRhdHJlbmRyZW0wIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmVfbWV0YWIuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWFzcy5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdmVnLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZHVyYXRpb24uc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZFRmdWxsSmJldGFyZW0wLCBmaWxlID0gJ3RlbXAvbW9kVGZ1bGxKYmV0YXJlbTAucmRzJykKfQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxIb3JucmVtMC5yZHMnKSl7CiAgbW9kVGZ1bGxIb3JucmVtMCA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsSG9ybnJlbTAucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbEhvcm5yZW0wIDwtIGxtZShIb3JudHJlbmRyZW0wIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnNwcC5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnZlZy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZHVyYXRpb24uc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTIsCiAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMyxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbEhvcm5yZW0wLCBmaWxlID0gJ3RlbXAvbW9kVGZ1bGxIb3JucmVtMC5yZHMnKQp9CgpzdW1tYXJ5KG1vZFRmdWxsSnR1cmVtMCkKc3VtbWFyeShtb2RUZnVsbEpiZXRhcmVtMCkKc3VtbWFyeShtb2RUZnVsbEhvcm5yZW0wKQoKcnNxdWFyZWQobW9kVGZ1bGxKdHVyZW0wKQpyc3F1YXJlZChtb2RUZnVsbEpiZXRhcmVtMCkKcnNxdWFyZWQobW9kVGZ1bGxIb3JucmVtMCkKCmBgYAoKIyMjIFBsb3RzIGZyb20gdGhlIGZ1bGwgbW9kZWxzCiMjIyMgUGxvdCB0aGUgY29lZmZpY2llbnRzCmBgYHtyIHBsb3QgZnVsbFRtb2RzLCBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9OX0KCmNvZWZzMSA8LSBzdW1tYXJ5KG1vZFRmdWxsSnR1cmVtMCkkdFRhYmxlCmNvZWZzMiA8LSBzdW1tYXJ5KG1vZFRmdWxsSmJldGFyZW0wKSR0VGFibGUKY29lZnMzIDwtIHN1bW1hcnkobW9kVGZ1bGxIb3JucmVtMCkkdFRhYmxlCgp2YXJzdG9wbG90IDwtIHVuaXF1ZShjKHJvd25hbWVzKGNvZWZzMSksIHJvd25hbWVzKGNvZWZzMiksIHJvd25hbWVzKGNvZWZzMykpKQp2YXJzdG9wbG90IDwtIHZhcnN0b3Bsb3Rbd2hpY2goIWdyZXBsKCdJbnRlcmNlcHQnLCB2YXJzdG9wbG90KSB8IGdyZXBsKCc6JywgdmFyc3RvcGxvdCkpXSAjIHZhcnMgdG8gcGxvdAoKcm93czFfMSA8LSB3aGljaChyb3duYW1lcyhjb2VmczEpICVpbiUgdmFyc3RvcGxvdCkgIyByb3dzIGluIGNvZWZzCnJvd3MxXzIgPC0gd2hpY2gocm93bmFtZXMoY29lZnMyKSAlaW4lIHZhcnN0b3Bsb3QpCnJvd3MxXzMgPC0gd2hpY2gocm93bmFtZXMoY29lZnMzKSAlaW4lIHZhcnN0b3Bsb3QpCnhsaW1zIDwtIHJhbmdlKGMoY29lZnMxW3Jvd3MxXzEsMV0gLSBjb2VmczFbcm93czFfMSwyXSwgY29lZnMxW3Jvd3MxXzEsMV0gKyBjb2VmczFbcm93czFfMSwyXSwgCiAgICAgICAgICAgICAgICAgIGNvZWZzMltyb3dzMV8yLDFdIC0gY29lZnMyW3Jvd3MxXzIsMl0sIGNvZWZzMltyb3dzMV8yLDFdICsgY29lZnMyW3Jvd3MxXzIsMl0sIAogICAgICAgICAgICAgICAgICBjb2VmczNbcm93czFfMywxXSAtIGNvZWZzM1tyb3dzMV8zLDJdLCBjb2VmczNbcm93czFfMywxXSArIGNvZWZzM1tyb3dzMV8zLDJdKSkKCgpjb2xzIDwtIGJyZXdlci5wYWwoMywgJ0RhcmsyJykgIyBmb3IgSnR1LCBKYmV0YSBhbmQgSG9ybiBtb2RlbHMKcGNocyA8LSBjKDE2LCAxNiwgMTYpCm9mZnMgPC0gYygwLjEsIDAsIC0wLjEpICMgb2Zmc2V0IHZlcnRpY2FsbHkgZm9yIGVhY2ggbW9kZWwKCgpwYXIobGFzID0gMSwgbWFpID0gYygwLjUsIDQsIDAuMSwgMC4xKSkKCnBsb3QoMCwwLCBjb2wgPSAnd2hpdGUnLCB4bGltID0geGxpbXMsIHlsaW0gPSBjKDEsbGVuZ3RoKHZhcnN0b3Bsb3QpKSwgeWF4dD0nbicsIHhsYWIgPSAnJywgeWxhYiA9JycpCmF4aXMoMiwgYXQgPSBsZW5ndGgodmFyc3RvcGxvdCk6MSwgbGFiZWxzID0gdmFyc3RvcGxvdCwgY2V4LmF4aXMgPSAwLjcpCmFibGluZSh2ID0gMCwgY29sID0gJ2dyZXknLCBsdHkgPSAyKQphYmxpbmUoaCA9IDE6bGVuZ3RoKHZhcnN0b3Bsb3QpLCBjb2wgPSAnZ3JleScsIGx0eSA9IDMpCmZvcihpIGluIDE6bGVuZ3RoKHZhcnN0b3Bsb3QpKXsKICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnMxKSl7CiAgICB4ID0gY29lZnMxW3Jvd25hbWVzKGNvZWZzMSkgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnMxW3Jvd25hbWVzKGNvZWZzMSkgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMV0sIHBjaCA9IHBjaHNbMV0sIGNvbCA9IGNvbHNbMV0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzFdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMV0pLCBjb2wgPSBjb2xzWzFdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnMyKSl7CiAgICB4ID0gY29lZnMyW3Jvd25hbWVzKGNvZWZzMikgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnMyW3Jvd25hbWVzKGNvZWZzMikgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMl0sIHBjaCA9IHBjaHNbMl0sIGNvbCA9IGNvbHNbMl0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzJdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMl0pLCBjb2wgPSBjb2xzWzJdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnMzKSl7CiAgICB4ID0gY29lZnMzW3Jvd25hbWVzKGNvZWZzMykgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnMzW3Jvd25hbWVzKGNvZWZzMykgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbM10sIHBjaCA9IHBjaHNbM10sIGNvbCA9IGNvbHNbM10pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzNdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbM10pLCBjb2wgPSBjb2xzWzNdKQogIH0KfQpsZWdlbmQoJ3RvcGxlZnQnLCBjb2wgPSBjb2xzLCBwY2ggPSAxNiwgbHdkID0gMSwgbGVnZW5kID0gYygnSnR1JywgJ0piZXRhJywgJ0hvcm4nKSwgY2V4ID0gMC41KQpgYGAKCgojIyMjIFBsb3QgdGhlIG1haW4gZWZmZWN0cwpgYGB7ciBtYWluIGVmZmVjdCBwbG90cyBtb2RUZnVsbEp0dXJlbTAsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CgojIHNldCB1cCB0aGUgdmFyaWFibGVzIHRvIHBsb3QKIyBpZiB2YXJpYWJsZSBpcyBsb2dnZWQgYmVmb3JlIHNjYWxpbmcgKHNlZSAnY2VudGVyIGFuZCBzY2FsZScgYWJvdmUpLCB0aGVuIG5lZWQgdG8gbWFyayBpdCBoZXJlIGFuZCBleHByZXNzIHRoZSBsaW1pdHMgb24gYSBsb2cxMCBzY2FsZSAoZXZlbiB0aG91Z2ggbG9nIHRyYW5zZm9ybWluZyBpcyBsb2cpCnZhcnMgPC0gZGF0YS5mcmFtZSh2YXJzID0gYygndGVtcHRyZW5kX2FicycsICd0ZW1wYXZlX21ldGFiJywgJ3NlYXMnLCAnbWljcm9jbGltJywgJ21hc3MnLCAnc3BlZWQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25zdW1lcmZyYWMnLCAnbnNwcCcsICd0aGVybWFsX2JpYXMnLCAnbnBwJywgJ3ZlZycsICdkdXJhdGlvbicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h1bWFuX2Jvd2xlcicsICdodW1hbl9ib3dsZXInKSwKICAgICAgICAgICBtaW4gPSAgICAgIGMoMCwgIDAsICAgMC4xLCAtMiwgIDAsICAgMCwgICAwLCAgIDAuMywgLTEwLCAxLjksIDAsICAgMC41LCAwLCAgIDApLCAKICAgICAgICAgICBtYXggPSAgICAgIGMoMiwgIDMwLCAgMTYsICAwLjgsIDgsICAgMiwgICAxLCAgIDIuNiwgMTAsICAzLjcsIDAuMywgMiwgICAxLCAgIDEpLAogICAgICAgICAgIGxvZyA9ICAgICAgYyhGLCAgRiwgICBGLCAgIFQsICAgVCwgICBULCAgIEYsICAgVCwgICBGLCAgIFQsICAgVCwgICBULCAgIFQsICAgVCksCiAgICAgICAgICAgbGVuID0gICAgICBjKDEwMCwgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCksCiAgICAgICAgICAgZGlzY3JldGUgPSBjKEYsICBGLCAgIEYsICAgRiwgICBGLCAgIEYsICAgRiwgICBGLCAgIEYsICAgRiwgICBGLCAgIEYsICAgRiwgICBGKSwKICAgICAgICAgICBwbHVzID0gICAgIGMoMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAxLCAgIDEpLCAjIHdoYXQgdG8gYWRkIGJlZm9yZSBsb2ctc2NhbGluZwogICAgICAgICAgIFJFQUxNID0gYyhyZXAoJ1RlcnJlc3RyaWFsJywgMTMpLCAnTWFyaW5lJyksCiAgICAgICAgICAgUkVBTE0yID0gYyhyZXAoJ1RlcnJGcmVzaCcsIDEzKSwgJ01hcmluZScpLAogICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKYmFzZWFsbCA8LSB0cmVuZHNbLCAuKHR5cGUgPSAnYWxsJywgCiAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmQgPSAtMC4wMDAxLAogICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyA9IDAuMDAwMSwKICAgICAgICAgICAgICAgICAgICAgIHRlbXBhdmVfbWV0YWIuc2MgPSBtZWFuKHRlbXBhdmVfbWV0YWIuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIHNlYXMuc2MgPSBtZWFuKHNlYXMuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIG1pY3JvY2xpbS5zYyA9IG1lYW4obWljcm9jbGltLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICBzcGVlZC5zYyA9IG1lYW4oc3BlZWQuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIG1hc3Muc2MgPSBtZWFuKG1hc3Muc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIG5zcHAuc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICAgIHRoZXJtYWxfYmlhcy5zYyA9IG1lYW4odGhlcm1hbF9iaWFzLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICBucHAuc2MgPSBtZWFuKG5wcC5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgaHVtYW5fYm93bGVyLnNjID0gbWVhbihodW1hbl9ib3dsZXIuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIHZlZy5zYyA9IG1lYW4odmVnLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MgPSBtZWFuKGNvbnN1bWVyZnJhYy5zYywgbmEucm09VFJVRSkpXQpiYXNldGVyciA8LSB0cmVuZHNbUkVBTE0gPT0gJ1RlcnJlc3RyaWFsJywgCiAgICAgICAgICAgICAgICAgICAuKHR5cGUgPSAnVGVycmVzdHJpYWwnLCAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kID0gLTAuMDAwMSwKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyA9IDAuMDAwMSwKICAgICAgICAgICAgICAgICAgICAgdGVtcGF2ZV9tZXRhYi5zYyA9IG1lYW4odGVtcGF2ZV9tZXRhYi5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICBzZWFzLnNjID0gbWVhbihzZWFzLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIG1pY3JvY2xpbS5zYyA9IG1lYW4obWljcm9jbGltLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIHNwZWVkLnNjID0gbWVhbihzcGVlZC5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICBtYXNzLnNjID0gbWVhbihtYXNzLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIG5zcHAuc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICAgdGhlcm1hbF9iaWFzLnNjID0gMCwgCiAgICAgICAgICAgICAgICAgICAgIG5wcC5zYyA9IG1lYW4obnBwLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIGh1bWFuX2Jvd2xlci5zYyA9IG1lYW4oaHVtYW5fYm93bGVyLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIHZlZy5zYyA9IG1lYW4odmVnLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYyA9IG1lYW4oY29uc3VtZXJmcmFjLnNjLCBuYS5ybT1UUlVFKSldCmJhc2VtYXIgPC0gdHJlbmRzW1JFQUxNID09ICdNYXJpbmUnLCAKICAgICAgICAgICAgICAgICAgLih0eXBlID0gJ01hcmluZScsCiAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kID0gLTAuMDAwMSwKICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjID0gMC4wMDAxLAogICAgICAgICAgICAgICAgICAgIHRlbXBhdmVfbWV0YWIuc2MgPSBtZWFuKHRlbXBhdmVfbWV0YWIuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICBzZWFzLnNjID0gbWVhbihzZWFzLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgbWljcm9jbGltLnNjID0gbWVhbihtaWNyb2NsaW0uc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICBzcGVlZC5zYyA9IG1lYW4oc3BlZWQuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICBtYXNzLnNjID0gbWVhbihtYXNzLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgbnNwcC5zYyA9IDAsIAogICAgICAgICAgICAgICAgICAgIHRoZXJtYWxfYmlhcy5zYyA9IDAsIAogICAgICAgICAgICAgICAgICAgIG5wcC5zYyA9IG1lYW4obnBwLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgaHVtYW5fYm93bGVyLnNjID0gbWVhbihodW1hbl9ib3dsZXIuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICB2ZWcuc2MgPSBtZWFuKHZlZy5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYyA9IG1lYW4oY29uc3VtZXJmcmFjLnNjLCBuYS5ybT1UUlVFKSldCmJhc2V0YWIgPC0gcmJpbmQoYmFzZWFsbCwgYmFzZXRlcnIsIGJhc2VtYXIpCmJhc2V0YWJbLCAnOj0nKGR1cmF0aW9uLnNjID0gMCwgbnlyQlQgPSAyMCwgU1RVRFlfSUQgPSAxMjdMLCByYXJlZnlJRCA9ICcxMjdfNTE0NjY4JyldCgojIG1ha2UgdGhlIGRhdGEgZnJhbWVzIGZvciBlYWNoIGludGVyYWN0aW9uIHRvIHBsb3QgICAgICAgICAgICAgICAgCmZvcihqIGluIDE6bnJvdyh2YXJzKSl7CiAgIyBzZXQgdXAgdGhlIG1haW4gZWZmZWN0cwogIGlmKHZhcnMkbG9nW2pdKXsKICAgIHRoaXNkYXQgPC0gZGF0YS5mcmFtZShuZXcgPSAxMF5zZXEodmFycyRtaW5bal0sIHZhcnMkbWF4W2pdLCBsZW5ndGgub3V0ID0gdmFycyRsZW5bal0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciA9IHZhcnMkdmFyc1tqXSkKICB9IAogIGlmKCF2YXJzJGxvZ1tqXSl7CiAgICB0aGlzZGF0IDwtIGRhdGEuZnJhbWUobmV3ID0gc2VxKHZhcnMkbWluW2pdLCB2YXJzJG1heFtqXSwgbGVuZ3RoLm91dCA9IHZhcnMkbGVuW2pdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgPSB2YXJzJHZhcnNbal0pCiAgfQogIG5hbWVzKHRoaXNkYXQpIDwtIGModmFycyR2YXJzW2pdLCAndmFyJykKCiAgIyBzY2FsZSB0aGUgdmFyaWFibGUKICBjZW50IDwtIGF0dHIodHJlbmRzW1twYXN0ZTAodmFycyR2YXJzW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpjZW50ZXInKQogIHNjbCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKHZhcnMkdmFyc1tqXSwgJy5zYycpXV0sICdzY2FsZWQ6c2NhbGUnKQogIGlmKGlzLm51bGwoY2VudCkpIGNlbnQgPC0gMAogIGlmKCFpcy5udWxsKGNlbnQpICYgIWlzLm51bGwoc2NsKSl7CiAgICBpZih2YXJzJGxvZ1tqXSkgdGhpc2RhdFtbcGFzdGUwKHZhcnMkdmFyW2pdLCAnLnNjJyldXSA8LSAobG9nKHRoaXNkYXRbW3ZhcnMkdmFyc1tqXV1dICsgdmFycyRwbHVzW2pdKSAtIGNlbnQpL3NjbAogICAgaWYoIXZhcnMkbG9nW2pdKSB0aGlzZGF0W1twYXN0ZTAodmFycyR2YXJbal0sICcuc2MnKV1dIDwtICh0aGlzZGF0W1t2YXJzJHZhcltqXV1dIC0gY2VudCkvc2NsCiAgfQoKICAjIG1lcmdlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbHVtbnMKICAjIHVzZSByZWFsbS1zcGVjaWZpYyBhdmVyYWdlcyBmb3IgaHVtYW4gaW1wYWN0cwogIGlmKHZhcnMkdmFyc1tqXSAhPSAndHNpZ24nKSBjb2xuYW1lc3RvdXNlIDwtIHNldGRpZmYoY29sbmFtZXMoYmFzZXRhYiksIHBhc3RlMCh2YXJzJHZhcnNbal0sICcuc2MnKSkKICBpZih2YXJzJHZhcnNbal0gPT0gJ3RzaWduJykgY29sbmFtZXN0b3VzZSA8LSBzZXRkaWZmKGNvbG5hbWVzKGJhc2V0YWIpLCB2YXJzJHZhcltqXSkKICBpZih2YXJzJHZhcnNbal0gIT0gJ2h1bWFuX2Jvd2xlcicpewogICAgdGhpc2RhdCA8LSBjYmluZCh0aGlzZGF0LCBiYXNldGFiW3R5cGUgPT0gJ2FsbCcsIC4uY29sbmFtZXN0b3VzZV0pCiAgfQogIGlmKHZhcnMkdmFyc1tqXSA9PSAnaHVtYW5fYm93bGVyJyAmIHZhcnMkUkVBTE1bal0gPT0gJ1RlcnJlc3RyaWFsJyl7CiAgICB0aGlzZGF0IDwtIGNiaW5kKHRoaXNkYXQsIGJhc2V0YWJbdHlwZSA9PSAnVGVycmVzdHJpYWwnLCAuLmNvbG5hbWVzdG91c2VdKQogIH0KICBpZih2YXJzJHZhcnNbal0gPT0gJ2h1bWFuX2Jvd2xlcicgJiB2YXJzJFJFQUxNW2pdID09ICdNYXJpbmUnKXsKICAgIHRoaXNkYXQgPC0gY2JpbmQodGhpc2RhdCwgYmFzZXRhYlt0eXBlID09ICdNYXJpbmUnLCAuLmNvbG5hbWVzdG91c2VdKQogIH0KICAKICAjIGFkZCByZWFsbQogIHRoaXNkYXQkUkVBTE0gPC0gdmFycyRSRUFMTVtqXQogIHRoaXNkYXQkUkVBTE0yIDwtIHZhcnMkUkVBTE0yW2pdCiAgCiAgIyBtZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBpdGVyYXRpb25zCiAgaWYoaiA9PSAxKSBuZXdkYXQgPC0gdGhpc2RhdAogIGlmKGogPiAxKXsKICAgIGNvbHN0b2FkZCA8LSBzZXRkaWZmKGNvbG5hbWVzKHRoaXNkYXQpLCBjb2xuYW1lcyhuZXdkYXQpKQogICAgZm9yKHRvYWRkIGluIGNvbHN0b2FkZCl7CiAgICAgIG5ld2RhdFtbdG9hZGRdXSA8LSBOQQogICAgfQogICAgCiAgICBjb2xzdG9hZGQyIDwtIHNldGRpZmYoY29sbmFtZXMobmV3ZGF0KSwgY29sbmFtZXModGhpc2RhdCkpCiAgICBmb3IodG9hZGQgaW4gY29sc3RvYWRkMil7CiAgICAgIHRoaXNkYXRbW3RvYWRkXV0gPC0gTkEKICAgIH0KICAgIAogICAgbmV3ZGF0IDwtIHJiaW5kKG5ld2RhdCwgdGhpc2RhdCkKICB9IAp9CgojIGNoYXJhY3RlciBzbyB0aGF0IG5ldyBsZXZlbHMgY2FuIGJlIGFkZGVkCm5ld2RhdCRSRUFMTSA8LSBhcy5jaGFyYWN0ZXIobmV3ZGF0JFJFQUxNKQpuZXdkYXQkUkVBTE0yIDwtIGFzLmNoYXJhY3RlcihuZXdkYXQkUkVBTE0yKQoKIyBhZGQgZXh0cmEgcm93cyBzbyB0aGF0IGFsbCBmYWN0b3IgbGV2ZWxzIGFyZSByZXByZXNlbnRlZCAoZm9yIHByZWRpY3QubG1lIHRvIHdvcmspCm5ld2RhdCA8LSByYmluZChuZXdkYXRbMTo2LCBdLCBuZXdkYXQpCm5ld2RhdCRSRUFMTVsxOjZdIDwtIGMoJ01hcmluZScsICdNYXJpbmUnLCAnRnJlc2h3YXRlcicsICdGcmVzaHdhdGVyJywgJ1RlcnJlc3RyaWFsJywgJ1RlcnJlc3RyaWFsJykKbmV3ZGF0JFJFQUxNMlsxOjZdIDwtIGMoJ01hcmluZScsICdNYXJpbmUnLCAnVGVyckZyZXNoJywgJ1RlcnJGcmVzaCcsICdUZXJyRnJlc2gnLCAnVGVyckZyZXNoJykKbmV3ZGF0JHRlbXB0cmVuZF9hYnMuc2NbMTo2XSA8LSByZXAoMC4wMDAxLCA2KQpuZXdkYXQkdGVtcHRyZW5kWzE6Nl0gPC0gcmVwKGMoMC4wMDAxLCAtMC4wMDAxKSwgMykKCiMgdHJpbSB0byBhdCBsZWFzdCBzb21lIHRlbXBlcmF0dXJlIGNoYW5nZSAoc28gdGhhdCB0c2lnbiBpcyAtMSBvciAxKQpuZXdkYXQgPC0gbmV3ZGF0W25ld2RhdCR0ZW1wdHJlbmRfYWJzLnNjICE9IDAsXQoKIyBzZXQgdXAgdHNpZ24KbmV3ZGF0JHRzaWduIDwtIGZhY3RvcihzaWduKG5ld2RhdCR0ZW1wdHJlbmQpKQoKCiMgbWFrZSBwcmVkaWN0aW9ucwpuZXdkYXQkcHJlZHMgPC0gcHJlZGljdChvYmplY3QgPSBtb2RUZnVsbEp0dXJlbTAsIG5ld2RhdGEgPSBuZXdkYXQsIGxldmVsID0gMCkKCiNyZW1vdmUgdGhlIGV4dHJhIHJvd3MKbmV3ZGF0IDwtIG5ld2RhdFs3Om5yb3cobmV3ZGF0KSwgXQoKIyBwcmVwIHRoZSBwbG90cwp2YXJwbG90cyA8LSB2ZWN0b3IoJ2xpc3QnLCBucm93KHZhcnMpKQpmb3IoaiBpbiAxOmxlbmd0aCh2YXJwbG90cykpewogIHN1YnMgPC0gbmV3ZGF0JHZhciA9PSB2YXJzJHZhcnNbal0gIyB3aGljaCByb3dzIG9mIG5ld2RhdAogIHh2YXIgPC0gdmFycyR2YXJzW2pdCiAgdGl0bGUgPC0gdmFycyR2YXJzW2pdCiAgaWYodmFycyR2YXJzW2pdICVpbiUgYygnaHVtYW5fYm93bGVyJykpewogICAgc3VicyA8LSBuZXdkYXQkdmFyID09IHZhcnMkdmFyc1tqXSAmIG5ld2RhdCRSRUFMTTIgPT0gdmFycyRSRUFMTTJbal0KICAgIHRpdGxlIDwtIHBhc3RlMCgnaHVtYW46JywgdmFycyRSRUFMTTJbal0pCiAgfSAKCiAgdGhpc3Bsb3QgPC0gZ2dwbG90KG5ld2RhdFtzdWJzLCBdLCAKICAgICAgICAgICAgICAgICAgICAgYWVzX3N0cmluZyh4ID0geHZhciwgeSA9ICdwcmVkcycpKSArCiAgICBnZW9tX2xpbmUoKSArCiAgICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMC40KSkgKwogICAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMC41LDAsMC41LDApLCAnY20nKSkgKwogICAgbGFicyh0aXRsZSA9IHRpdGxlKQogIGlmKHZhcnMkbG9nW2pdICYgIXZhcnMkZGlzY3JldGVbal0pewogICAgdmFycGxvdHNbW2pdXSA8LSB0aGlzcGxvdCArIHNjYWxlX3hfbG9nMTAoKQogIH0KfQoKZ3JpZC5hcnJhbmdlKGdyb2JzID0gdmFycGxvdHMsIG5jb2wgPSAzKQoKIyB3cml0ZSBvdXQgdGhlIGludGVyYWN0aW9ucwp3cml0ZS5jc3YobmV3ZGF0LCBmaWxlID0gJ3RlbXAvbWFpbmVmZmVjdHMuY3N2JykKCmBgYAoKCiMjIyMgUGxvdCBpbnRlcmFjdGlvbnMgKEphY2NhcmQgdHVybm92ZXIpCmBgYHtyIGludGVyYWN0aW9uIHBsb3RzIG1vZFRmdWxsSnR1cmVtMCwgZmlnLmhlaWdodCA9IDEzLCBmaWcud2lkdGggPSA5fQoKIyBzZXQgdXAgdGhlIGludGVyYWN0aW9ucyB0byBwbG90CiMgaWYgdmFyaWFibGUgaXMgbG9nZ2VkIGJlZm9yZSBzY2FsaW5nIChzZWUgJ2NlbnRlciBhbmQgc2NhbGUnIGFib3ZlKSwgdGhlbiBuZWVkIHRvIG1hcmsgaXQgaGVyZSBhbmQgZXhwcmVzcyB0aGUgbGltaXRzIG9uIGEgbG9nMTAgc2NhbGUgKGV2ZW4gdGhvdWdoIGxvZyB0cmFuc2Zvcm1pbmcgaXMgbG9nKQppbnRzIDwtIGRhdGEuZnJhbWUodmFycyA9IGMoJ3RzaWduJywgJ3RlbXBhdmVfbWV0YWInLCAnc2VhcycsICdtaWNyb2NsaW0nLCAnbWFzcycsICdzcGVlZCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnN1bWVyZnJhYycsICduc3BwJywgJ3RoZXJtYWxfYmlhcycsICducHAnLCAndmVnJywgJ2R1cmF0aW9uJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHVtYW5fYm93bGVyJywgJ2h1bWFuX2Jvd2xlcicpLAogICAgICAgICAgIG1pbiA9ICAgICAgYygxLCAgMCwgICAwLjEsIC0yLCAgMCwgICAwLCAgIDAsICAgMC4zLCAtMTAsIDEuOSwgMCwgICAwLjUsIDAsICAgMCksIAogICAgICAgICAgIG1heCA9ICAgICAgYygyLCAgMzAsICAxNiwgIDAuOCwgOCwgICAyLCAgIDEsICAgMi42LCAxMCwgIDMuNywgMC4zLCAyLCAgIDEsICAgMSksCiAgICAgICAgICAgbG9nID0gICAgICBjKEYsICBGLCAgIEYsICAgVCwgICBULCAgIFQsICAgRiwgICBULCAgIEYsICAgVCwgICBULCAgIFQsICAgVCwgICBUKSwKICAgICAgICAgICBsZW4gPSAgICAgIGMoMiwgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCksCiAgICAgICAgICAgZGlzY3JldGUgPSBjKFQsICBGLCAgIEYsICAgRiwgICBGLCAgIEYsICAgRiwgICBGLCAgIEYsICAgRiwgICBGLCAgIEYsICAgRiwgICBGKSwKICAgICAgICAgICBwbHVzID0gICAgIGMoMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAxLCAgIDEpLCAjIHdoYXQgdG8gYWRkIGJlZm9yZSBsb2ctc2NhbGluZwogICAgICAgICAgIFJFQUxNID0gYyhyZXAoJ1RlcnJlc3RyaWFsJywgMTIpLCAnVGVycmVzdHJpYWwnLCAnTWFyaW5lJyksCiAgICAgICAgICAgUkVBTE0yID0gYyhyZXAoJ1RlcnJGcmVzaCcsIDEzKSwgJ01hcmluZScpLAogICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKYmFzZWFsbCA8LSB0cmVuZHNbLCAuKHR5cGUgPSAnYWxsJywgdGVtcGF2ZV9tZXRhYi5zYyA9IG1lYW4odGVtcGF2ZV9tZXRhYi5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgc2Vhcy5zYyA9IG1lYW4oc2Vhcy5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgbWljcm9jbGltLnNjID0gbWVhbihtaWNyb2NsaW0uc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIHNwZWVkLnNjID0gbWVhbihzcGVlZC5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgbWFzcy5zYyA9IG1lYW4obWFzcy5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgbnNwcC5zYyA9IDAsIAogICAgICAgICAgICAgICAgICAgICAgdGhlcm1hbF9iaWFzLnNjID0gbWVhbih0aGVybWFsX2JpYXMuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIG5wcC5zYyA9IG1lYW4obnBwLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICBodW1hbl9ib3dsZXIuc2MgPSBtZWFuKGh1bWFuX2Jvd2xlci5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgdmVnLnNjID0gbWVhbih2ZWcuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYyA9IG1lYW4oY29uc3VtZXJmcmFjLnNjLCBuYS5ybT1UUlVFKSldCmJhc2V0ZXJyIDwtIHRyZW5kc1tSRUFMTSA9PSAnVGVycmVzdHJpYWwnLCAKICAgICAgICAgICAgICAgICAgIC4odHlwZSA9ICdUZXJyZXN0cmlhbCcsIAogICAgICAgICAgICAgICAgICAgICB0ZW1wYXZlX21ldGFiLnNjID0gbWVhbih0ZW1wYXZlX21ldGFiLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIHNlYXMuc2MgPSBtZWFuKHNlYXMuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgbWljcm9jbGltLnNjID0gbWVhbihtaWNyb2NsaW0uc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgc3BlZWQuc2MgPSBtZWFuKHNwZWVkLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hc3Muc2MgPSBtZWFuKG1hc3Muc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgbnNwcC5zYyA9IDAsIAogICAgICAgICAgICAgICAgICAgICB0aGVybWFsX2JpYXMuc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICAgbnBwLnNjID0gbWVhbihucHAuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgaHVtYW5fYm93bGVyLnNjID0gbWVhbihodW1hbl9ib3dsZXIuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgdmVnLnNjID0gbWVhbih2ZWcuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjID0gbWVhbihjb25zdW1lcmZyYWMuc2MsIG5hLnJtPVRSVUUpKV0KYmFzZW1hciA8LSB0cmVuZHNbUkVBTE0gPT0gJ01hcmluZScsIAogICAgICAgICAgICAgICAgICAuKHR5cGUgPSAnTWFyaW5lJywKICAgICAgICAgICAgICAgICAgICB0ZW1wYXZlX21ldGFiLnNjID0gbWVhbih0ZW1wYXZlX21ldGFiLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgc2Vhcy5zYyA9IG1lYW4oc2Vhcy5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgIG1pY3JvY2xpbS5zYyA9IG1lYW4obWljcm9jbGltLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgc3BlZWQuc2MgPSBtZWFuKHNwZWVkLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgbWFzcy5zYyA9IG1lYW4obWFzcy5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgIG5zcHAuc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICB0aGVybWFsX2JpYXMuc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICBucHAuc2MgPSBtZWFuKG5wcC5zYywgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgIGh1bWFuX2Jvd2xlci5zYyA9IG1lYW4oaHVtYW5fYm93bGVyLnNjLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgdmVnLnNjID0gbWVhbih2ZWcuc2MsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MgPSBtZWFuKGNvbnN1bWVyZnJhYy5zYywgbmEucm09VFJVRSkpXQpiYXNldGFiIDwtIHJiaW5kKGJhc2VhbGwsIGJhc2V0ZXJyLCBiYXNlbWFyKQpiYXNldGFiWywgJzo9JyhkdXJhdGlvbi5zYyA9IDAsIG55ckJUID0gMjAsIFNUVURZX0lEID0gMTI3TCwgcmFyZWZ5SUQgPSAnMTI3XzUxNDY2OCcpXQoKIyBtYWtlIHRoZSBkYXRhIGZyYW1lcyBmb3IgZWFjaCBpbnRlcmFjdGlvbiB0byBwbG90ICAgICAgICAgICAgICAgIApmb3IoaiBpbiAxOm5yb3coaW50cykpewogICMgc2V0IHVwIGEgZ3JpZCBvZiB0ZW1wZXJhdHVyZSB0cmVuZHMgYW5kIHRoZSBpbnRlcmFjdGluZyB2YXJpYWJsZQogIGlmKGludHMkbG9nW2pdKSBpbnR2YXJzIDwtIGxpc3QodGVtcHRyZW5kID0gc2VxKC0xLjUsIDEuNSwgbGVuZ3RoLm91dCA9IDEwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ID0gMTBec2VxKGludHMkbWluW2pdLCBpbnRzJG1heFtqXSwgbGVuZ3RoLm91dCA9IGludHMkbGVuW2pdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgPSBpbnRzJHZhcnNbal0pCiAgaWYoIWludHMkbG9nW2pdKSBpbnR2YXJzIDwtIGxpc3QodGVtcHRyZW5kID0gc2VxKC0xLjUsIDEuNSwgbGVuZ3RoLm91dCA9IDEwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyA9IHNlcShpbnRzJG1pbltqXSwgaW50cyRtYXhbal0sIGxlbmd0aC5vdXQgPSBpbnRzJGxlbltqXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyID0gaW50cyR2YXJzW2pdKQogIG5hbWVzKGludHZhcnMpIDwtIGMoJ3RlbXB0cmVuZCcsIGludHMkdmFyc1tqXSwgJ3ZhcicpCiAgdGhpc2RhdCA8LSBleHBhbmQuZ3JpZChpbnR2YXJzKQogIAogICMgc2NhbGUgdGhlIGludGVyYWN0aW5nIHZhcmlhYmxlCiAgY2VudCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpjZW50ZXInKQogIHNjbCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpzY2FsZScpCiAgaWYoIWlzLm51bGwoY2VudCkgJiAhaXMubnVsbChzY2wpKXsKICAgIGlmKGludHMkbG9nW2pdKSB0aGlzZGF0W1twYXN0ZTAoaW50cyR2YXJbal0sICcuc2MnKV1dIDwtIChsb2codGhpc2RhdFtbaW50cyR2YXJzW2pdXV0gKyBpbnRzJHBsdXNbal0pIC0gY2VudCkvc2NsCiAgICBpZighaW50cyRsb2dbal0pIHRoaXNkYXRbW3Bhc3RlMChpbnRzJHZhcltqXSwgJy5zYycpXV0gPC0gKHRoaXNkYXRbW2ludHMkdmFyW2pdXV0gLSBjZW50KS9zY2wKICB9CgogICMgbWVyZ2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucwogICMgdXNlIHJlYWxtLXNwZWNpZmljIGF2ZXJhZ2VzIGZvciBodW1hbiBpbXBhY3RzCiAgaWYoaW50cyR2YXJzW2pdICE9ICd0c2lnbicpIGNvbG5hbWVzdG91c2UgPC0gc2V0ZGlmZihjb2xuYW1lcyhiYXNldGFiKSwgcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJykpCiAgaWYoaW50cyR2YXJzW2pdID09ICd0c2lnbicpIGNvbG5hbWVzdG91c2UgPC0gc2V0ZGlmZihjb2xuYW1lcyhiYXNldGFiKSwgaW50cyR2YXJbal0pCiAgaWYoaW50cyR2YXJzW2pdICE9ICdodW1hbl9ib3dsZXInKXsKICAgIHRoaXNkYXQgPC0gY2JpbmQodGhpc2RhdCwgYmFzZXRhYlt0eXBlID09ICdhbGwnLCAuLmNvbG5hbWVzdG91c2VdKQogIH0KICBpZihpbnRzJHZhcnNbal0gPT0gJ2h1bWFuX2Jvd2xlcicgJiBpbnRzJFJFQUxNW2pdID09ICdUZXJyZXN0cmlhbCcpewogICAgdGhpc2RhdCA8LSBjYmluZCh0aGlzZGF0LCBiYXNldGFiW3R5cGUgPT0gJ1RlcnJlc3RyaWFsJywgLi5jb2xuYW1lc3RvdXNlXSkKICB9CiAgaWYoaW50cyR2YXJzW2pdID09ICdodW1hbl9ib3dsZXInICYgaW50cyRSRUFMTVtqXSA9PSAnTWFyaW5lJyl7CiAgICB0aGlzZGF0IDwtIGNiaW5kKHRoaXNkYXQsIGJhc2V0YWJbdHlwZSA9PSAnTWFyaW5lJywgLi5jb2xuYW1lc3RvdXNlXSkKICB9CiAgCiAgIyBhZGQgcmVhbG0KICB0aGlzZGF0JFJFQUxNIDwtIGludHMkUkVBTE1bal0KICB0aGlzZGF0JFJFQUxNMiA8LSBpbnRzJFJFQUxNMltqXQogIAogICMgbWVyZ2Ugd2l0aCB0aGUgcHJldmlvdXMgaXRlcmF0aW9ucwogIGlmKGogPT0gMSkgbmV3ZGF0IDwtIHRoaXNkYXQKICBpZihqID4gMSl7CiAgICBjb2xzdG9hZGQgPC0gc2V0ZGlmZihjb2xuYW1lcyh0aGlzZGF0KSwgY29sbmFtZXMobmV3ZGF0KSkKICAgIGZvcih0b2FkZCBpbiBjb2xzdG9hZGQpewogICAgICBuZXdkYXRbW3RvYWRkXV0gPC0gTkEKICAgIH0KICAgIAogICAgY29sc3RvYWRkMiA8LSBzZXRkaWZmKGNvbG5hbWVzKG5ld2RhdCksIGNvbG5hbWVzKHRoaXNkYXQpKQogICAgZm9yKHRvYWRkIGluIGNvbHN0b2FkZDIpewogICAgICB0aGlzZGF0W1t0b2FkZF1dIDwtIE5BCiAgICB9CiAgICAKICAgIG5ld2RhdCA8LSByYmluZChuZXdkYXQsIHRoaXNkYXQpCiAgfSAKfQoKIyBjaGFyYWN0ZXIgc28gdGhhdCBuZXcgbGV2ZWxzIGNhbiBiZSBhZGRlZApuZXdkYXQkUkVBTE0gPC0gYXMuY2hhcmFjdGVyKG5ld2RhdCRSRUFMTSkKbmV3ZGF0JFJFQUxNMiA8LSBhcy5jaGFyYWN0ZXIobmV3ZGF0JFJFQUxNMikKCiMgYWRkIGV4dHJhIHJvd3Mgc28gdGhhdCBhbGwgZmFjdG9yIGxldmVscyBhcmUgcmVwcmVzZW50ZWQgKGZvciBwcmVkaWN0LmxtZSB0byB3b3JrKQpuZXdkYXQgPC0gcmJpbmQobmV3ZGF0WzE6NiwgXSwgbmV3ZGF0KQpuZXdkYXQkUkVBTE1bMTo2XSA8LSBjKCdNYXJpbmUnLCAnTWFyaW5lJywgJ0ZyZXNod2F0ZXInLCAnRnJlc2h3YXRlcicsICdUZXJyZXN0cmlhbCcsICdUZXJyZXN0cmlhbCcpCm5ld2RhdCRSRUFMTTJbMTo2XSA8LSBjKCdNYXJpbmUnLCAnTWFyaW5lJywgJ1RlcnJGcmVzaCcsICdUZXJyRnJlc2gnLCAnVGVyckZyZXNoJywgJ1RlcnJGcmVzaCcpCm5ld2RhdCR0ZW1wdHJlbmRbMTo2XSA8LSBjKC0xLCAxLCAtMSwgMSwgLTEsIDEpCgojIHRyaW0gdG8gYXQgbGVhc3Qgc29tZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgKHNvIHRoYXQgdHNpZ24gaXMgLTEgb3IgMSkKbmV3ZGF0IDwtIG5ld2RhdFtuZXdkYXQkdGVtcHRyZW5kICE9IDAsXQoKIyBzY2FsZSB0aGUgdGVtcGVyYXR1cmUgdmFycwpuZXdkYXQkdGVtcHRyZW5kLnNjIDwtIG5ld2RhdCR0ZW1wdHJlbmQvYXR0cih0cmVuZHMkdGVtcHRyZW5kLnNjLCAnc2NhbGVkOnNjYWxlJykgCm5ld2RhdCR0ZW1wdHJlbmRfYWJzIDwtIGFicyhuZXdkYXQkdGVtcHRyZW5kKQpuZXdkYXQkdGVtcHRyZW5kX2Ficy5zYyA8LSAobmV3ZGF0JHRlbXB0cmVuZF9hYnMpL2F0dHIodHJlbmRzJHRlbXB0cmVuZF9hYnMuc2MsICdzY2FsZWQ6c2NhbGUnKQpuZXdkYXQkdHNpZ24gPC0gZmFjdG9yKHNpZ24obmV3ZGF0JHRlbXB0cmVuZCkpCgojIG1ha2UgcHJlZGljdGlvbnMKbmV3ZGF0JHByZWRzIDwtIHByZWRpY3Qob2JqZWN0ID0gbW9kVGZ1bGxKdHVyZW0wLCBuZXdkYXRhID0gbmV3ZGF0LCBsZXZlbCA9IDApCgojcmVtb3ZlIHRoZSBleHRyYSByb3dzCm5ld2RhdCA8LSBuZXdkYXRbNTpucm93KG5ld2RhdCksIF0KCiMgcHJlcCB0aGUgcGxvdHMKaW50cGxvdHMgPC0gdmVjdG9yKCdsaXN0JywgbnJvdyhpbnRzKSkKZm9yKGogaW4gMTpsZW5ndGgoaW50cGxvdHMpKXsKICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdICYgbmV3ZGF0JHRlbXB0cmVuZCA+IDAgIyBzZWxlY3Qgd2FybWluZyBzaWRlCiAgeHZhciA8LSAndGVtcHRyZW5kX2FicycKICB0aXRsZSA8LSBpbnRzJHZhcnNbal0KICBpZihpbnRzJHZhcnNbal0gJWluJSBjKCd0c2lnbicpKXsKICAgIHN1YnMgPC0gbmV3ZGF0JHZhciA9PSBpbnRzJHZhcnNbal0KICB9IAogIGlmKGludHMkdmFyc1tqXSAlaW4lIGMoJ3RoZXJtYWxfYmlhcycpKXsKICAgIHN1YnMgPC0gbmV3ZGF0JHZhciA9PSBpbnRzJHZhcnNbal0KICAgIHh2YXIgPC0gJ3RlbXB0cmVuZCcKICB9IAogIGlmKGludHMkdmFyc1tqXSAlaW4lIGMoJ2h1bWFuX2Jvd2xlcicpKXsKICAgIHN1YnMgPC0gbmV3ZGF0JHZhciA9PSBpbnRzJHZhcnNbal0gJiBuZXdkYXQkdGVtcHRyZW5kID4gMCAmIG5ld2RhdCRSRUFMTTIgPT0gaW50cyRSRUFMTTJbal0KICAgIHRpdGxlIDwtIHBhc3RlMCgnaHVtYW46JywgaW50cyRSRUFMTTJbal0pCiAgfSAKCiAgdGhpc3Bsb3QgPC0gZ2dwbG90KG5ld2RhdFtzdWJzLCBdLCAKICAgICAgICAgICAgICAgICAgICAgYWVzX3N0cmluZyh4ID0geHZhciwgeSA9ICdwcmVkcycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gaW50cyR2YXJzW2pdLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGludHMkdmFyc1tqXSkpICsKICAgIGdlb21fbGluZSgpICsKICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMC4yLCAwLjQpKSArCiAgICB0aGVtZShwbG90Lm1hcmdpbiA9IHVuaXQoYygwLjUsMCwwLjUsMCksICdjbScpKSArCiAgICBsYWJzKHRpdGxlID0gdGl0bGUpCiAgaWYoaW50cyRsb2dbal0gJiAhaW50cyRkaXNjcmV0ZVtqXSl7CiAgICBpbnRwbG90c1tbal1dIDwtIHRoaXNwbG90ICsgc2NhbGVfY29sb3JfZGlzdGlsbGVyKHBhbGV0dGUgPSAiWWxHbkJ1IiwgdHJhbnMgPSAnbG9nJykKICB9CiAgaWYoIWludHMkbG9nW2pdICYgIWludHMkZGlzY3JldGVbal0pewogICAgaW50cGxvdHNbW2pdXSA8LSB0aGlzcGxvdCArIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIllsR25CdSIsIHRyYW5zID0gJ2lkZW50aXR5JykKICB9CiAgaWYoaW50cyRkaXNjcmV0ZVtqXSl7CiAgICBpbnRwbG90c1tbal1dIDwtIHRoaXNwbG90ICsgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKQogIH0KfQoKI2dyaWQuYXJyYW5nZShncm9icyA9IGludHBsb3RzLCAnKycsIHRoZW1lKHBsb3QubWFyZ2luID0gdW5pdChjKDAsMCwwLDApLCAnY20nKSkpLCBuY29sPTIpCiNkby5jYWxsKCdncmlkLmFycmFuZ2UnLCBjKGludHBsb3RzLCBuY29sID0gMikpCmdyaWQuYXJyYW5nZShncm9icyA9IGludHBsb3RzLCBuY29sID0gMykKCiMgd3JpdGUgb3V0IHRoZSBpbnRlcmFjdGlvbnMKd3JpdGUuY3N2KG5ld2RhdCwgZmlsZSA9ICd0ZW1wL2ludGVyYWN0aW9ucy5jc3YnKQoKYGBgCgojIyMjIFBsb3QgcmVzaWR1YWxzIGFnYWluc3QgZWFjaCBwcmVkaWN0b3IgKEphY2NhcmQgdHVybm92ZXIpCmBgYHtyIHJlc2lkcyBtb2RUZnVsbDEsIGZpZy5oZWlnaHQgPSAxMCwgZmlnLndpZHRoPTEwfQpyZXNpZHMgPC0gcmVzaWQobW9kVGZ1bGxKdHVyZW0wKQpwcmVkcyA8LSBnZXREYXRhKG1vZFRmdWxsSnR1cmVtMCkKY29sID0gJyMwMDAwMDAzMycKY2V4ID0gMC41CnBhcihtZnJvdyA9IGMoNSw0KSkKYm94cGxvdChyZXNpZHMgfiBwcmVkcyRSRUFMTSwgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkdGVtcHRyZW5kX2Ficy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR0c2lnbiwgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR0ZW1wYXZlLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJHRlbXBhdmVfbWV0YWIuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkc2Vhcy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRtaWNyb2NsaW0uc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkbWFzcy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRzcGVlZC5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRsaWZlc3Bhbi5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRjb25zdW1lcmZyYWMuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkZW5kb3RoZXJtZnJhYy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRuc3BwLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJHRoZXJtYWxfYmlhcy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRucHAuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkdmVnLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJGh1bWFuX2Jvd2xlci5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKYGBgCgojIyMgUmVtb3ZlIGVhY2ggdGVybSBmcm9tIHRoZSBmdWxsIG1vZGVsCmBgYHtyIHRlcm0gZGVsZXRpb24gZnJvbSBtb2RUZnVsbH0KQUlDbmFzIDwtIGZ1bmN0aW9uKHgpewogIGlmKGNsYXNzKHgpID09ICdOVUxMJyl7CiAgICByZXR1cm4oTkEpCiAgfSBlbHNlIHsKICAgIHJldHVybihBSUMoeCkpCiAgfQp9CgppZihmaWxlLmV4aXN0cygnb3V0cHV0L2FpY3NfZnJvbV9mdWxsLmNzdicpKXsKICBhaWNzZnJvbWZ1bGwgPC0gcmVhZC5jc3YoJ291dHB1dC9haWNzX2Zyb21fZnVsbC5jc3YnKQogIAogIGlmKCdkQUlDX0p0dScgJWluJSBjb2xuYW1lcyhhaWNzZnJvbWZ1bGwpKXsKICAgIHJ1bkp0dSA8LSBGQUxTRQogIH0gZWxzZSB7CiAgICBydW5KdHUgPC0gVFJVRQogIH0KICAKICBpZignZEFJQ19KYmV0YScgJWluJSBjb2xuYW1lcyhhaWNzZnJvbWZ1bGwpKXsKICAgIHJ1bkpiZXRhIDwtIEZBTFNFCiAgfSBlbHNlIHsKICAgIHJ1bkpiZXRhIDwtIFRSVUUKICB9CiAgCiAgaWYoJ2RBSUNfSG9ybicgJWluJSBjb2xuYW1lcyhhaWNzZnJvbWZ1bGwpKXsKICAgIHJ1bkhvcm4gPC0gRkFMU0UKICB9IGVsc2UgewogICAgcnVuSG9ybiA8LSBUUlVFCiAgfQogIAp9IGVsc2UgewogIHJ1bkp0dSA8LSBUUlVFCiAgcnVuSmJldGEgPC0gVFJVRQogIHJ1bkhvcm4gPC0gVFJVRQp9CgpyYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKdGVybXMgPC0gYygndGVtcHRyZW5kX2Ficy5zYypSRUFMTScsIAogICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnRzaWduJywKICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjJywKICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjJywKICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MnLAogICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MnLAogICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjJywgCiAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjJywKICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjJywKICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24nLAogICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKm5wcC5zYycsCiAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqdmVnLnNjJywKICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypkdXJhdGlvbi5zYycsCiAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqaHVtYW5fYm93bGVyLnNjOlJFQUxNMicpCgoKaWYocnVuSnR1KXsKICBpIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kcmVtMCwgUkVBTE0sIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlZy5zYywgZHVyYXRpb24uc2MsIGh1bWFuX2Jvd2xlci5zYyldCiAgCiAgbW9kVGRyb3BzIDwtIHZlY3RvcignbGlzdCcsIGxlbmd0aCh0ZXJtcykrMikKICBuYW1lcyhtb2RUZHJvcHMpIDwtIGMoJ2Z1bGwnLCAnLXRlbXB0cmVuZF9hYnMuc2MnLCBwYXN0ZTAoJy0nLCB0ZXJtcykpCiAgCiAgIyBmaXQgZnVsbCBtb2RlbCB3aXRoIE1MIGZvciBtb2RlbCBjb21wYXJpc29uCiAgbW9kVGRyb3BzW1sxXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKdHV0cmVuZHJlbTAgfiAnLCBwYXN0ZSh0ZXJtcywgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnTUwnKQogIAogICMgdy9vdXQgdGVtcHRyZW5kCiAgbW9kVGRyb3BzW1syXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKdHV0cmVuZHJlbTAgfiAnLCBwYXN0ZShnc3ViKCd0ZW1wdHJlbmRfYWJzLnNjXFwqJywgJycsIHRlcm1zKSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdChTVFVEWV9JRCA9IH4gMSwgcmFyZWZ5SUQgPSB+MSksIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpLF0sIG1ldGhvZCA9ICdNTCcpCiAgCiAgZm9yKGogaW4gMTpsZW5ndGgodGVybXMpKXsKICAgIHByaW50KGopCiAgICB0cnlDYXRjaCh7CiAgICAgIG1vZFRkcm9wc1tbaisyXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKdHV0cmVuZHJlbTAgfiAnLCBwYXN0ZSh0ZXJtc1stal0sIGNvbGxhcHNlID0gJyArICcpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2ksXSwgbWV0aG9kID0gJ01MJykKICAgICAgCiAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpewogICAgICBwcmludCgnZ29pbmcgdG8gb3B0aW0gKEp0dSknKQogICAgICB0cnlDYXRjaCh7CiAgICAgICAgbW9kVGRyb3BzW1tqKzJdXSA8LSBsbWUoZm9ybXVsYShwYXN0ZTAoJ0p0dXRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpLF0sIG1ldGhvZCA9ICdNTCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gJ29wdGltJykpCiAgICAgICAgCiAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSl7CiAgICAgICAgcHJpbnQoJ2dvaW5nIHRvIG1vcmUgaXRlcnMgKEp0dSknKSAKICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICBtb2RUZHJvcHNbW2orMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSnR1dHJlbmRyZW0wIH4gJywgcGFzdGUodGVybXNbLWpdLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnTUwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxtZUNvbnRyb2wobWF4SXRlciA9IDEwMCwgbXNNYXhJdGVyID0gMTAwLCBuaXRlckVNID0gNTAsIG1zTWF4RXZhbCA9IDUwMCkpCiAgICAgICAgICAKICAgICAgICB9LCBlcnJvcj0gZnVuY3Rpb24oZSl7CiAgICAgICAgICBwcmludCgnZ2l2aW5nIHVwIG9uIHRoaXMgb25lJykKICAgICAgICAgIG1vZFRkcm9wc1tbaisyXV0gPC0gTkEKICAgICAgICB9KQogICAgICB9KQogICAgfSkKICB9CiAgCiAgYWljc0p0dSA8LSBzYXBwbHkobW9kVGRyb3BzLCBBSUNuYXMpCn0KCgppZihydW5KYmV0YSl7CiAgaSA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhKYmV0YXRyZW5kcmVtMCwgUkVBTE0sIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlZy5zYywgZHVyYXRpb24uc2MsIGh1bWFuX2Jvd2xlci5zYyldCiAgCiAgbW9kVEpiZXRhZHJvcHMgPC0gdmVjdG9yKCdsaXN0JywgbGVuZ3RoKHRlcm1zKSsyKQogIG5hbWVzKG1vZFRKYmV0YWRyb3BzKSA8LSBjKCdmdWxsJywgJy10ZW1wdHJlbmRfYWJzLnNjJywgcGFzdGUwKCctJywgdGVybXMpKQogIAogICMgZml0IGZ1bGwgbW9kZWwgd2l0aCBNTCBmb3IgbW9kZWwgY29tcGFyaXNvbgogIG1vZFRKYmV0YWRyb3BzW1sxXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKYmV0YXRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2ksXSwgbWV0aG9kID0gJ01MJykKICAKICAjIHcvb3V0IHRlbXB0cmVuZAogIG1vZFRKYmV0YWRyb3BzW1syXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKYmV0YXRyZW5kcmVtMCB+ICcsIHBhc3RlKGdzdWIoJ3RlbXB0cmVuZF9hYnMuc2NcXConLCAnJywgdGVybXMpLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IDEsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnTUwnKQogIAogIGZvcihqIGluIDE6bGVuZ3RoKHRlcm1zKSl7CiAgICBwcmludChqKQogICAgdHJ5Q2F0Y2goewogICAgICBtb2RUSmJldGFkcm9wc1tbaisyXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKYmV0YXRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpLF0sIG1ldGhvZCA9ICdNTCcpCiAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpewogICAgICBwcmludCgnZ29pbmcgdG8gb3B0aW0gKEpiZXRhKScpCiAgICAgIHRyeUNhdGNoKHsKICAgICAgICBtb2RUSmJldGFkcm9wc1tbaisyXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKYmV0YXRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2ksXSwgbWV0aG9kID0gJ01MJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICdvcHRpbScpKQogICAgICAgIAogICAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpewogICAgICAgIHByaW50KCdnb2luZyB0byBtb3JlIGl0ZXJzIChKYmV0YSknKSAKICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICBtb2RUSmJldGFkcm9wc1tbaisyXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdKYmV0YXRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnTUwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gbG1lQ29udHJvbChtYXhJdGVyID0gMTAwLCBtc01heEl0ZXIgPSAxMDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaXRlckVNID0gNTAsIG1zTWF4RXZhbCA9IDUwMCkpCiAgICAgICAgfSwgZXJyb3I9IGZ1bmN0aW9uKGUpewogICAgICAgICAgcHJpbnQoJ2dpdmluZyB1cCBvbiB0aGlzIG9uZSAoSmJldGEpJykKICAgICAgICAgIG1vZFRKYmV0YWRyb3BzW1tqKzJdXSA8LSBOQQogICAgICAgIH0pCiAgICAgIH0KICAgICAgKQogICAgfQogICAgKQogIH0KICBhaWNzSmJldGEgPC0gc2FwcGx5KG1vZFRKYmV0YWRyb3BzLCBBSUNuYXMpCn0KCmlmKHJ1bkhvcm4pewogIGkyIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEhvcm50cmVuZHJlbTAsIFJFQUxNLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWcuc2MsIGR1cmF0aW9uLnNjLCBodW1hbl9ib3dsZXIuc2MpXQogIAogIG1vZFRIb3JuZHJvcHMgPC0gdmVjdG9yKCdsaXN0JywgbGVuZ3RoKHRlcm1zKSsyKQogIG5hbWVzKG1vZFRIb3JuZHJvcHMpIDwtIGMoJ2Z1bGwnLCAnLXRlbXB0cmVuZF9hYnMuc2MnLCBwYXN0ZTAoJy0nLCB0ZXJtcykpCiAgbW9kVEhvcm5kcm9wc1tbMV1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSG9ybnRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTIsXSwgbWV0aG9kID0gJ01MJykKICBtb2RUSG9ybmRyb3BzW1syXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdIb3JudHJlbmRyZW0wIH4gJywgcGFzdGUoZ3N1YigndGVtcHRyZW5kX2Ficy5zY1xcKicsICcnLCB0ZXJtcyksIGNvbGxhcHNlID0gJyArICcpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KFNUVURZX0lEID0gfiAxLCByYXJlZnlJRCA9IH4xKSwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdNTCcpCiAgCiAgZm9yKGogaW4gMTpsZW5ndGgodGVybXMpKXsKICAgIHByaW50KGopCiAgICB0cnlDYXRjaCh7CiAgICAgIG1vZFRIb3JuZHJvcHNbW2orMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSG9ybnRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdNTCcpCiAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpewogICAgICBwcmludCgnZ29pbmcgdG8gb3B0aW0gKEhvcm4pJykKICAgICAgdHJ5Q2F0Y2goewogICAgICAgIG1vZFRIb3JuZHJvcHNbW2orMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSG9ybnRyZW5kcmVtMCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTIsXSwgbWV0aG9kID0gJ01MJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gJ29wdGltJykpCiAgICAgICAgCiAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSl7CiAgICAgICAgcHJpbnQoJ2dvaW5nIHRvIG1vcmUgaXRlcnMgKEhvcm4pJykgCiAgICAgICAgdHJ5Q2F0Y2goewogICAgICAgICAgbW9kVEhvcm5kcm9wc1tbaisyXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdIb3JudHJlbmRyZW0wIH4gJywgcGFzdGUodGVybXNbLWpdLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdNTCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxtZUNvbnRyb2wobWF4SXRlciA9IDEwMCwgbXNNYXhJdGVyID0gMTAwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaXRlckVNID0gNTAsIG1zTWF4RXZhbCA9IDUwMCkpCiAgICAgICAgICAKICAgICAgICB9LCBlcnJvcj0gZnVuY3Rpb24oZSl7CiAgICAgICAgICBwcmludCgnZ2l2aW5nIHVwIG9uIHRoaXMgb25lIChIb3JuKScpCiAgICAgICAgICBtb2RUSG9ybmRyb3BzW1tqKzJdXSA8LSBOQQogICAgICAgIH0pCiAgICAgIH0pCiAgICB9KQogIH0KICBhaWNzSG9ybiA8LSBzYXBwbHkobW9kVEhvcm5kcm9wcywgQUlDbmFzKQp9CgojIGlmIHRoZXJlIHdhcyBhbnl0aGluZyBuZXcKaWYocnVuSnR1IHwgcnVuSmJldGEgfCBydW5Ib3JuKXsKICBpZighZXhpc3RzKCdhaWNzZnJvbWZ1bGwnKSl7CiAgICBhaWNzZnJvbWZ1bGwgPC0gZGF0YS5mcmFtZShtb2QgPSBuYW1lcyhhaWNzSnR1KSkKICB9CiAgCiAgIyBzdWJ0cmFjdCBmdWxsIGZyb20gZWFjaCBtb2RlbCBBSUMuIE5lZ2F0aXZlIG1lYW5zIHRlcm0gcmVtb3ZhbCBpcyBzdXBwb3J0ZWQuIFBvc2l0aXZlIG1lYW5zIGZ1bGwgaXMgdGhlIGJldHRlciBtb2RlbC4KICBpZihydW5KdHUpewogICAgYWljc2Zyb21mdWxsJGRBSUNfSnR1IDwtIGFpY3NKdHUgLSBhaWNzSnR1WzFdCiAgfQogIGlmKHJ1bkpiZXRhKXsKICAgIGFpY3Nmcm9tZnVsbCRkQUlDX0piZXRhIDwtIGFpY3NKYmV0YSAtIGFpY3NKYmV0YVsxXQogIH0KICBpZihydW5Ib3JuKXsKICAgIGFpY3Nmcm9tZnVsbCRkQUlDX0hvcm4gPC0gYWljc0hvcm4gLSBhaWNzSG9yblsxXQogIH0KICAKICAjIHdyaXRlIG91dAogIHdyaXRlLmNzdihhaWNzZnJvbWZ1bGwsIGZpbGUgPSAnb3V0cHV0L2FpY3NfZnJvbV9mdWxsLmNzdicsIHJvdy5uYW1lcyA9IEZBTFNFKQp9CgphaWNzZnJvbWZ1bGwKYGBgCgojIyMjIFBsb3QgZGVsdGFBSUNzIGZvciBhbGwgMyBtb2RlbHMKYGBge3IgcGxvdCBkQUlDc30KIyB0cmFuc2Zvcm0gZm9yIGEgcGxvdAphaWNzZnJvbWZ1bGxsb25nIDwtIHJlc2hhcGUoYWljc2Zyb21mdWxsLCBkaXJlY3Rpb24gPSAnbG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nID0gYygnZEFJQ19KdHUnLCAnZEFJQ19KYmV0YScsICdkQUlDX0hvcm4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYubmFtZXMgPSAnZEFJQycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHZhciA9ICdtb2QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXZhciA9ICd0eXBlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzID0gYygnSnR1JywgJ0piZXRhJywgJ0hvcm4nKSkKCnRyYW5zID0gZnVuY3Rpb24oeCkgc2lnbih4KSpzcXJ0KGFicyh4KSkKYWljc2Zyb21mdWxsbG9uZyRkQUlDX3RyIDwtIHRyYW5zKGFpY3Nmcm9tZnVsbGxvbmckZEFJQykKCiMgcGxvdAp4bGltcyA8LSByYW5nZShhaWNzZnJvbWZ1bGxsb25nJGRBSUNfdHIsIG5hLnJtID0gVFJVRSkKeHRpY2tzIDwtIGMoLTEwLCAwLCAxMCwgMTAwLCAxMDAwLCAxMDAwMCkKcGFyKG1haSA9IGMoMC41LCAzLCAwLjEsIDAuMSkpCndpdGgoYWljc2Zyb21mdWxsbG9uZ1thaWNzZnJvbWZ1bGxsb25nJHR5cGUgPT0gJ0p0dScsXSwgcGxvdChkQUlDX3RyLCBucm93KGFpY3Nmcm9tZnVsbCk6MSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gJ2xpZ2h0IGdyZXknLCB4bGltID0geGxpbXMsIHlheHQgPSAnbicsIHlsYWIgPSAnJywgeGF4dCA9ICduJykpCndpdGgoYWljc2Zyb21mdWxsbG9uZ1thaWNzZnJvbWZ1bGxsb25nJHR5cGUgPT0gJ0piZXRhJyxdLCBwb2ludHMoZEFJQ190ciwgbnJvdyhhaWNzZnJvbWZ1bGwpOjEgLSAwLjEsIGNvbCA9ICdkYXJrIGdyZXknKSkKd2l0aChhaWNzZnJvbWZ1bGxsb25nW2FpY3Nmcm9tZnVsbGxvbmckdHlwZSA9PSAnSG9ybicsXSwgcG9pbnRzKGRBSUNfdHIsIG5yb3coYWljc2Zyb21mdWxsKToxIC0gMC4yLCBjb2wgPSAnYmxhY2snKSkKYXhpcygyLCBhdCA9IG5yb3coYWljc2Zyb21mdWxsKToxLCBsYWJlbHMgPSBhaWNzZnJvbWZ1bGwkbW9kLCBsYXMgPSAxLCBjZXguYXhpcyA9IDAuNykKYXhpcygxLCBhdCA9IHRyYW5zKHh0aWNrcyksIGxhYmVscyA9IHh0aWNrcywgY2V4LmF4aXMgPSAwLjUpCmFibGluZSh2ID0gMCwgbHR5ID0yLCBjb2wgPSAnZ3JleScpCmBgYAoKTGlnaHQgZ3JleSBpcyBmb3IgSmFjY2FyZCB0dXJub3ZlciwgZGFyayBncmV5IGlzIGZvciBKYWNjYXJkIHRvdGFsLCBibGFjayBpcyBmb3IgTW9yaXNpdGEtSG9ybi4KQ2xlYXIgdGhhdCByZW1vdmluZyB0ZW1wZXJhdHVyZSB0cmVuZCBtYWtlcyB0aGUgbW9kZWwgcXVpdGUgYSBiaXQgd29yc2UgYW5kIGhhcyB0aGUgYmlnZ2VzdCBlZmZlY3QuCgoKCiMjIFNpbXBsaWZ5IHRoZSBmdWxsIG1vZGVscwpUaGlzIHRha2VzIGEgY291cGxlIGRheXMgb24gYSBsYXB0b3AgdG8gcnVuIGlmIHRlbXAvIGZpbGVzIG5vdCBhdmFpbGFibGUuCmBgYHtyIHNpbXBsaWZ5IHRoZSBmdWxsIG1vZGVsc30KaTEgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmRyZW0wLCBSRUFMTSwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVnLnNjLCBkdXJhdGlvbi5zYywgaHVtYW5fYm93bGVyLnNjKV0KaTIgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWcuc2MsIGR1cmF0aW9uLnNjLCBodW1hbl9ib3dsZXIuc2MpXQppMyA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhIb3JudHJlbmRyZW0wLCBSRUFMTSwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVnLnNjLCBkdXJhdGlvbi5zYywgaHVtYW5fYm93bGVyLnNjKV0KCnJhbmRlZiA8LSBsaXN0KFNUVURZX0lEID0gfiB0ZW1wdHJlbmRfYWJzLnNjLCByYXJlZnlJRCA9IH4xKQp2YXJlZiA8LSB2YXJQb3dlcigtMC41LCB+bnlyQlQpCgojIHNpbXBsaWZ5IHRoZSBmdWxsIG1vZGVscwppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUc2ltcEp0dXJlbTAucmRzJykpewogIG1vZFRzaW1wSnR1cmVtMCA8LSByZWFkUkRTKCd0ZW1wL21vZFRzaW1wSnR1cmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsSnR1cmVtME1MIDwtIGxtZShKdHV0cmVuZHJlbTAgfiB0ZW1wdHJlbmRfYWJzLnNjKlJFQUxNICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypkdXJhdGlvbi5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTIsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTEsXSwgbWV0aG9kID0gJ01MJywKICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gbG1lQ29udHJvbChtYXhJdGVyID0gMTAwLCBtc01heEl0ZXIgPSAxMDAsIG5pdGVyRU0gPSA1MCwgbXNNYXhFdmFsID0gNTAwKSkKICBtb2RUc2ltcEp0dXJlbTAgPC0gc3RlcEFJQyhtb2RUZnVsbEp0dXJlbTBNTCwgZGlyZWN0aW9uID0gJ2JhY2t3YXJkJykKICBzYXZlUkRTKG1vZFRzaW1wSnR1cmVtMCwgZmlsZSA9ICd0ZW1wL21vZFRzaW1wSnR1cmVtMC5yZHMnKQp9CgppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUc2ltcEpiZXRhcmVtMC5yZHMnKSl7CiAgbW9kVHNpbXBKYmV0YXJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2RUc2ltcEpiZXRhcmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsSmJldGFyZW0wTUwgPC0gbG1lKEpiZXRhdHJlbmRyZW0wIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmVfbWV0YWIuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWFzcy5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdmVnLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZHVyYXRpb24uc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdNTCcpCiAgbW9kVHNpbXBKYmV0YXJlbTAgPC0gc3RlcEFJQyhtb2RUZnVsbEpiZXRhcmVtME1MLCBkaXJlY3Rpb24gPSAnYmFja3dhcmQnKQogIHNhdmVSRFMobW9kVHNpbXBKYmV0YXJlbTAsIGZpbGUgPSAndGVtcC9tb2RUc2ltcEpiZXRhcmVtMC5yZHMnKQp9CgppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUc2ltcEhvcm5yZW0wLnJkcycpKXsKICBtb2RUc2ltcEhvcm5yZW0wIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVHNpbXBIb3JucmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsSG9ybnJlbTBNTCA8LSBsbWUoSG9ybnRyZW5kcmVtMCB+IHRlbXB0cmVuZF9hYnMuc2MqUkVBTE0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmR1cmF0aW9uLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTMsXSwgbWV0aG9kID0gJ01MJykKICBtb2RUc2ltcEhvcm5yZW0wIDwtIHN0ZXBBSUMobW9kVGZ1bGxIb3JucmVtME1MLCBkaXJlY3Rpb24gPSAnYmFja3dhcmQnKQogIHNhdmVSRFMobW9kVHNpbXBIb3JucmVtMCwgZmlsZSA9ICd0ZW1wL21vZFRzaW1wSG9ybnJlbTAucmRzJykKfQoKc3VtbWFyeShtb2RUc2ltcEp0dXJlbTApCnN1bW1hcnkobW9kVHNpbXBKYmV0YXJlbTApCnN1bW1hcnkobW9kVHNpbXBIb3JucmVtMCkKCgpgYGAKCgojIyBNYWtlIHJlYWxtLXNwZWNpZmljIG1vZGVscwpgYGB7ciBMTUUgSG9ybiBtb2RlbHMgYnkgcmVhbG0sIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04fQppMSA8LSB0cmVuZHNbLCBSRUFMTSA9PSAnVGVycmVzdHJpYWwnICYgY29tcGxldGUuY2FzZXMoSG9ybnRyZW5kcmVtMCwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVnLnNjLCBkdXJhdGlvbi5zYywgaHVtYW5fYm93bGVyLnNjKV0KaTIgPC0gdHJlbmRzWywgUkVBTE0gPT0gJ0ZyZXNod2F0ZXInICYgY29tcGxldGUuY2FzZXMoSG9ybnRyZW5kcmVtMCwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlZy5zYywgZHVyYXRpb24uc2MsIGh1bWFuX2Jvd2xlci5zYyldICMgbm8gY29uc3VtZXJmcmFjCmkzIDwtIHRyZW5kc1ssIFJFQUxNID09ICdNYXJpbmUnICYgY29tcGxldGUuY2FzZXMoSG9ybnRyZW5kcmVtMCwgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24uc2MsIGh1bWFuX2Jvd2xlci5zYyldICMgbm8gdmVnCgpwcmludChwYXN0ZSgnVGVycmVzdHJpYWwnLCBzdW0oaTEpKSkKcHJpbnQocGFzdGUoJ0ZyZXNod2F0ZXInLCBzdW0oaTIpKSkKcHJpbnQocGFzdGUoJ01hcmluZScsIHN1bShpMykpKQoKcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpCnZhcmVmIDwtIHZhclBvd2VyKC0wLjUsIH5ueXJCVCkKCiMgbGFuZAppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUZnVsbEhvcm5UZXJyLnJkcycpKXsKICBtb2RUZnVsbEhvcm5UZXJyIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxIb3JuVGVyci5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsSG9yblRlcnIgPC0gbG1lKEhvcm50cmVuZHJlbTAgfiAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnNwcC5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5wcC5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnZlZy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmR1cmF0aW9uLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqaHVtYW5fYm93bGVyLnNjLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kxLF0sIG1ldGhvZCA9ICdSRU1MJywKICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gbG1lQ29udHJvbChtYXhJdGVyID0gMTAwLCBtc01heEl0ZXIgPSAxMDAsIG5pdGVyRU0gPSA1MCwgbXNNYXhFdmFsID0gNTAwKSkKICBzYXZlUkRTKG1vZFRmdWxsSG9yblRlcnIsIGZpbGUgPSAndGVtcC9tb2RUZnVsbEhvcm5UZXJyLnJkcycpCn0KCiMgZnJlc2h3YXRlcgppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUZnVsbEhvcm5GcmVzaC5yZHMnKSl7CiAgbW9kVGZ1bGxIb3JuRnJlc2ggPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbEhvcm5GcmVzaC5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsSG9ybkZyZXNoIDwtIGxtZShIb3JudHJlbmRyZW0wIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypkdXJhdGlvbi5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYywKICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMixdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbEhvcm5GcmVzaCwgZmlsZSA9ICd0ZW1wL21vZFRmdWxsSG9ybkZyZXNoLnJkcycpCn0KCiMgbWFyaW5lCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsSG9ybk1hci5yZHMnKSl7CiAgbW9kVGZ1bGxIb3JuTWFyIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxIb3JuTWFyLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxIb3JuTWFyIDwtIGxtZShIb3JudHJlbmRyZW0wIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypkdXJhdGlvbi5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYywKICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMyxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbEhvcm5NYXIsIGZpbGUgPSAndGVtcC9tb2RUZnVsbEhvcm5NYXIucmRzJykKfQoKc3VtbWFyeShtb2RUZnVsbEhvcm5UZXJyKQpzdW1tYXJ5KG1vZFRmdWxsSG9ybkZyZXNoKQpzdW1tYXJ5KG1vZFRmdWxsSG9ybk1hcikKYGBgCiMjIyBQbG90IHRoZSByZWFsbS1zcGVjaWZpYyBjb2VmZmljaWVudHMKQWxzbyB1c2VzIHRoZSBmdWxsIG1vZGVscyBhY3Jvc3MgYWxsIHJlYWxtcwpgYGB7ciBwbG90IHJlYWxtIG1vZHMsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD05fQoKY29lZnMxIDwtIHN1bW1hcnkobW9kVGZ1bGxIb3JucmVtMCkkdFRhYmxlCmNvZWZzMiA8LSBzdW1tYXJ5KG1vZFRmdWxsSG9yblRlcnIpJHRUYWJsZQpjb2VmczMgPC0gc3VtbWFyeShtb2RUZnVsbEhvcm5GcmVzaCkkdFRhYmxlCmNvZWZzNCA8LSBzdW1tYXJ5KG1vZFRmdWxsSG9ybk1hcikkdFRhYmxlCgp2YXJzdG9wbG90IDwtIHVuaXF1ZShjKHJvd25hbWVzKGNvZWZzMSksIHJvd25hbWVzKGNvZWZzMiksIHJvd25hbWVzKGNvZWZzMyksIHJvd25hbWVzKGNvZWZzNCkpKQp2YXJzdG9wbG90IDwtIHZhcnN0b3Bsb3Rbd2hpY2goIWdyZXBsKCdJbnRlcmNlcHQnLCB2YXJzdG9wbG90KSB8IGdyZXBsKCc6JywgdmFyc3RvcGxvdCkpXSAjIHZhcnMgdG8gcGxvdAoKcm93czFfMSA8LSB3aGljaChyb3duYW1lcyhjb2VmczEpICVpbiUgdmFyc3RvcGxvdCkgIyByb3dzIGluIGNvZWZzCnJvd3MxXzIgPC0gd2hpY2gocm93bmFtZXMoY29lZnMyKSAlaW4lIHZhcnN0b3Bsb3QpCnJvd3MxXzMgPC0gd2hpY2gocm93bmFtZXMoY29lZnMzKSAlaW4lIHZhcnN0b3Bsb3QpCnJvd3MxXzQgPC0gd2hpY2gocm93bmFtZXMoY29lZnM0KSAlaW4lIHZhcnN0b3Bsb3QpCnhsaW1zIDwtIHJhbmdlKGMoY29lZnMxW3Jvd3MxXzEsMV0gLSBjb2VmczFbcm93czFfMSwyXSwgY29lZnMxW3Jvd3MxXzEsMV0gKyBjb2VmczFbcm93czFfMSwyXSwgCiAgICAgICAgICAgICAgICAgY29lZnMyW3Jvd3MxXzIsMV0gLSBjb2VmczJbcm93czFfMiwyXSwgY29lZnMyW3Jvd3MxXzIsMV0gKyBjb2VmczJbcm93czFfMiwyXSwgCiAgICAgICAgICAgICAgICAgY29lZnMzW3Jvd3MxXzMsMV0gLSBjb2VmczNbcm93czFfMywyXSwgY29lZnMzW3Jvd3MxXzMsMV0gKyBjb2VmczNbcm93czFfMywyXSwKICAgICAgICAgICAgICAgICBjb2VmczRbcm93czFfNCwxXSAtIGNvZWZzNFtyb3dzMV80LDJdLCBjb2VmczRbcm93czFfNCwxXSArIGNvZWZzNFtyb3dzMV80LDJdKSkKCgpjb2xzIDwtIGJyZXdlci5wYWwoNCwgJ0RhcmsyJykgIyBmb3IgZnVsbCwgdGVyciwgZnJlc2gsIG1hcgpwY2hzIDwtIGMoMSwgMTYsIDE2LCAxNikKb2ZmcyA8LSBjKDAuMSwgMCwgLTAuMSwgLTAuMikgIyBvZmZzZXQgdmVydGljYWxseSBmb3IgZWFjaCBtb2RlbAoKCnBhcihsYXMgPSAxLCBtYWkgPSBjKDAuNSwgNCwgMC4xLCAwLjEpKQoKcGxvdCgwLDAsIGNvbCA9ICd3aGl0ZScsIHhsaW0gPSB4bGltcywgeWxpbSA9IGMoMSxsZW5ndGgodmFyc3RvcGxvdCkpLCB5YXh0PSduJywgeGxhYiA9ICcnLCB5bGFiID0nJykKYXhpcygyLCBhdCA9IGxlbmd0aCh2YXJzdG9wbG90KToxLCBsYWJlbHMgPSB2YXJzdG9wbG90LCBjZXguYXhpcyA9IDAuNykKYWJsaW5lKHYgPSAwLCBjb2wgPSAnZ3JleScsIGx0eSA9IDIpCmFibGluZShoID0gMTpsZW5ndGgodmFyc3RvcGxvdCksIGNvbCA9ICdncmV5JywgbHR5ID0gMykKZm9yKGkgaW4gMTpsZW5ndGgodmFyc3RvcGxvdCkpewogIGlmKHZhcnN0b3Bsb3RbaV0gJWluJSByb3duYW1lcyhjb2VmczEpKXsKICAgIHggPSBjb2VmczFbcm93bmFtZXMoY29lZnMxKSA9PSB2YXJzdG9wbG90W2ldLCAxXQogICAgc2UgPSBjb2VmczFbcm93bmFtZXMoY29lZnMxKSA9PSB2YXJzdG9wbG90W2ldLCAyXQogICAgcG9pbnRzKHgsIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1sxXSwgcGNoID0gcGNoc1sxXSwgY29sID0gY29sc1sxXSkKICAgIGxpbmVzKHggPSBjKHgtc2UsIHgrc2UpLCB5ID0gYyhsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMV0sIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1sxXSksIGNvbCA9IGNvbHNbMV0pCiAgfQogIGlmKHZhcnN0b3Bsb3RbaV0gJWluJSByb3duYW1lcyhjb2VmczIpKXsKICAgIHggPSBjb2VmczJbcm93bmFtZXMoY29lZnMyKSA9PSB2YXJzdG9wbG90W2ldLCAxXQogICAgc2UgPSBjb2VmczJbcm93bmFtZXMoY29lZnMyKSA9PSB2YXJzdG9wbG90W2ldLCAyXQogICAgcG9pbnRzKHgsIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1syXSwgcGNoID0gcGNoc1syXSwgY29sID0gY29sc1syXSkKICAgIGxpbmVzKHggPSBjKHgtc2UsIHgrc2UpLCB5ID0gYyhsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMl0sIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1syXSksIGNvbCA9IGNvbHNbMl0pCiAgfQogIGlmKHZhcnN0b3Bsb3RbaV0gJWluJSByb3duYW1lcyhjb2VmczMpKXsKICAgIHggPSBjb2VmczNbcm93bmFtZXMoY29lZnMzKSA9PSB2YXJzdG9wbG90W2ldLCAxXQogICAgc2UgPSBjb2VmczNbcm93bmFtZXMoY29lZnMzKSA9PSB2YXJzdG9wbG90W2ldLCAyXQogICAgcG9pbnRzKHgsIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1szXSwgcGNoID0gcGNoc1szXSwgY29sID0gY29sc1szXSkKICAgIGxpbmVzKHggPSBjKHgtc2UsIHgrc2UpLCB5ID0gYyhsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbM10sIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1szXSksIGNvbCA9IGNvbHNbM10pCiAgfQogIGlmKHZhcnN0b3Bsb3RbaV0gJWluJSByb3duYW1lcyhjb2VmczQpKXsKICAgIHggPSBjb2VmczRbcm93bmFtZXMoY29lZnM0KSA9PSB2YXJzdG9wbG90W2ldLCAxXQogICAgc2UgPSBjb2VmczRbcm93bmFtZXMoY29lZnM0KSA9PSB2YXJzdG9wbG90W2ldLCAyXQogICAgcG9pbnRzKHgsIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1s0XSwgcGNoID0gcGNoc1s0XSwgY29sID0gY29sc1s0XSkKICAgIGxpbmVzKHggPSBjKHgtc2UsIHgrc2UpLCB5ID0gYyhsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNF0sIGxlbmd0aCh2YXJzdG9wbG90KSArIDEgLSBpICsgb2Zmc1s0XSksIGNvbCA9IGNvbHNbNF0pCiAgfQp9CmxlZ2VuZCgnYm90dG9tbGVmdCcsIGNvbCA9IGNvbHMsIHBjaCA9IHBjaHMsIGx3ZCA9IDEsIGxlZ2VuZCA9IGMoJ0FsbCcsICdUZXJlc3RyaWFsJywgJ0ZyZXNod2F0ZXInLCAnTWFyaW5lJykpCmBgYAoKW0VuZCB0ZXh0IGluIGhvcGVzIHRoaXMgaGVscHMgdGhlIGxhc3QgZmlndXJlIHNob3cgdXAgd2hlbiBrbml0dGVkXQ==